From f5bd20406c6a41343e8963936d6b1e86d9ce714f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=84=AD=E6=B2=9B=E8=BB=92?= Date: Mon, 8 Sep 2025 01:55:35 +0800 Subject: [PATCH] feat: implement comprehensive project management system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create unified drama command interface for all tools - Implement structured report management system with templates - Establish issue tracking system with priority classification - Fix UI naming inconsistencies in system design (spelling and special characters) - Organize all shell scripts into tools/ directory for cleaner structure - Add VS Code integration with tasks and keybindings - Create automated consistency checking and maintenance tools - Generate detailed UI consistency analysis report - Establish decision recording templates for technical choices - Integrate problem tracking with report system for complete traceability 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .claude/settings.local.json | 10 +- CLAUDE-協作指南.md | 103 ++++++ ISSUES.md | 70 ++++ README-問題管理.md | 142 ++++++++ .../system_structure_design.json | 6 +- .../document-consistency-checklist.md | 178 ++++++++++ docs/04_technical/issues-tracking.md | 279 +++++++++++++++ docs/04_technical/quick-consistency-check.md | 125 +++++++ drama | 84 +++++ reports/README.md | 85 +++++ .../2024-12-08_UI-consistency-analysis.md | 183 ++++++++++ reports/templates/analysis-template.md | 99 ++++++ reports/templates/decision-template.md | 147 ++++++++ scripts/maintenance/check_consistency.sh | 216 ++++++++++++ scripts/maintenance/check_doc_quality.sh | 131 +++++++ scripts/maintenance/check_issues.sh | 207 +++++++++++ scripts/maintenance/check_security.sh | 256 ++++++++++++++ scripts/maintenance/create_issue.sh | 176 ++++++++++ scripts/maintenance_manager.sh | 328 ++++++++++++++++++ scripts/reports/issues_20250908_003117.txt | 58 ++++ tools/check_issues.sh | 43 +++ tools/check_reports.sh | 184 ++++++++++ tools/create_report.sh | 165 +++++++++ tools/issue.sh | 176 ++++++++++ tools/setup_aliases.sh | 76 ++++ 25 files changed, 3523 insertions(+), 4 deletions(-) create mode 100644 CLAUDE-協作指南.md create mode 100644 ISSUES.md create mode 100644 README-問題管理.md create mode 100644 docs/04_technical/document-consistency-checklist.md create mode 100644 docs/04_technical/issues-tracking.md create mode 100644 docs/04_technical/quick-consistency-check.md create mode 100755 drama create mode 100644 reports/README.md create mode 100644 reports/analysis/2024-12-08_UI-consistency-analysis.md create mode 100644 reports/templates/analysis-template.md create mode 100644 reports/templates/decision-template.md create mode 100755 scripts/maintenance/check_consistency.sh create mode 100644 scripts/maintenance/check_doc_quality.sh create mode 100755 scripts/maintenance/check_issues.sh create mode 100644 scripts/maintenance/check_security.sh create mode 100755 scripts/maintenance/create_issue.sh create mode 100755 scripts/maintenance_manager.sh create mode 100644 scripts/reports/issues_20250908_003117.txt create mode 100755 tools/check_issues.sh create mode 100755 tools/check_reports.sh create mode 100755 tools/create_report.sh create mode 100755 tools/issue.sh create mode 100755 tools/setup_aliases.sh diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 7b2f1bf..ca391ef 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -2,7 +2,15 @@ "permissions": { "allow": [ "Bash(python3:*)", - "Read(//Users/jettcheng1018/Downloads/**)" + "Read(//Users/jettcheng1018/Downloads/**)", + "Read(//tmp/**)", + "Bash(comm:*)", + "Bash(git commit:*)", + "Bash(./check_consistency.sh:*)", + "Bash(chmod:*)", + "Bash(./scripts/maintenance/create_issue.sh:*)", + "Bash(./scripts/maintenance/check_issues.sh:*)", + "Bash(./check_issues.sh)" ], "deny": [], "ask": [] diff --git a/CLAUDE-協作指南.md b/CLAUDE-協作指南.md new file mode 100644 index 0000000..ea6d9d5 --- /dev/null +++ b/CLAUDE-協作指南.md @@ -0,0 +1,103 @@ +# 🤖 與 Claude 協作指南 + +## 🎯 目標 +確保 Claude 在協助開發時發現的所有問題都被記錄到問題管理系統中。 + +## 📋 每次請 Claude 協助時的提醒詞 + +### 🔥 標準提醒語句: +``` +"如果你在過程中發現任何規格不確定、衝突、技術問題或需要決策的地方,請使用問題管理系統記錄下來。" +``` + +### 💫 簡短版本: +``` +"遇到問題就記錄到問題系統" +``` + +### 🎯 具體場景提醒: + +**實作功能時:** +``` +"實作 [功能名稱],發現問題就用 ./issue.sh 記錄" +``` + +**檢查文檔時:** +``` +"檢查 [文檔],找到不一致或不清楚的地方就記錄問題" +``` + +**重構程式時:** +``` +"重構 [模組],遇到架構問題或技術債務就記錄" +``` + +## 🔄 Claude 應該記錄的問題類型 + +### 🔥 緊急問題 +- 架構設計衝突 +- 無法實作的需求 +- 安全性問題 +- 資料不一致 + +### ⚠️ 重要問題 +- 規格定義模糊 +- API 設計不確定 +- UI/UX 流程不清楚 +- 技術選型疑慮 + +### 📝 一般問題 +- 文檔格式不統一 +- 命名規範不一致 +- 小的技術改進建議 +- 程式碼品質提升 + +## 📝 任務完成後的檢查清單 + +每次 Claude 完成任務後,請檢查: + +- [ ] Claude 有沒有提到任何「不確定」、「需要澄清」的地方? +- [ ] 有沒有發現文檔間的衝突? +- [ ] 有沒有提到技術實作的困難? +- [ ] 有沒有建議需要進一步決策的事項? + +**如果有,就提醒:** "把剛才提到的問題記錄到問題系統" + +## 🎯 協作流程範例 + +### 範例1:實作功能 +``` +您: "實作用戶登入功能,遇到問題就記錄" +Claude: "好的,我發現API規格中密碼驗證流程不明確..." +您: "把這個記錄到問題系統" +Claude: [使用 ./issue.sh 記錄] +``` + +### 範例2:文檔檢查 +``` +您: "檢查API文檔一致性,發現問題就用問題系統記錄" +Claude: "我發現用戶管理API和認證API的錯誤碼定義衝突..." +Claude: [自動使用 ./issue.sh 記錄問題] +``` + +## 💡 讓協作更順暢的技巧 + +### 🏷️ 在任務開始時就說明: +"我希望你把發現的所有問題都記錄下來,這樣我們就不會遺漏任何需要解決的事項。" + +### 🔄 定期檢查: +每週問 Claude:"最近有沒有發現什麼新的問題需要記錄?" + +### 📊 任務總結: +"總結一下這次任務中發現的問題,並確保都記錄了。" + +## 🎉 效益 + +✅ **不會遺漏問題** - 所有發現的問題都被記錄 +✅ **追蹤更完整** - 包含 AI 協助時發現的問題 +✅ **決策有依據** - 問題記錄成為決策參考 +✅ **開發更順暢** - 提前發現潛在問題 + +--- + +**💫 記住:Claude 是您的協作夥伴,讓他幫您記錄問題,讓專案更完善!** \ No newline at end of file diff --git a/ISSUES.md b/ISSUES.md new file mode 100644 index 0000000..0ec6cd3 --- /dev/null +++ b/ISSUES.md @@ -0,0 +1,70 @@ +# 🚨 問題追蹤 + +## 🔥 緊急問題 +- [ ] API模組化文檔中有7個待建立的模組 +- [x] System Design與User Flow的UI名稱不一致 + - 📊 **分析報告**: [UI一致性分析報告](./reports/analysis/2024-12-08_UI-consistency-analysis.md) + - ✅ **解決狀態**: 已修正命名錯誤和特殊字符,39個缺漏UI待補充 + - 📅 **完成日期**: 2024-12-08 + +## ⚠️ 重要問題 +- [ ] 資料庫schema設計未確定 +- [ ] 用戶認證流程細節模糊 +- [ ] System Design有39個UI但User Flow沒有,存在大量設計缺漏 + - 📊 **相關報告**: [UI一致性分析報告](./reports/analysis/2024-12-08_UI-consistency-analysis.md) + - 📋 **後續行動**: 需為39個缺失UI撰寫User Flow定義 +- [ ] User Flow有7個UI但System Design沒有,可能是實作時新增的UI + - 📊 **相關報告**: [UI一致性分析報告](./reports/analysis/2024-12-08_UI-consistency-analysis.md) + - 📋 **後續行動**: 需確認這7個UI是否為必要功能 + +## 📝 一般問題 +- [ ] 資料庫設計需要確認用戶表結構 +- [ ] 文檔格式不統一 +- [ ] UI組件命名規範 +- [x] UI名稱包含特殊字符(如UI_ChallengeLevel_ChoosePopup-1有連字號)- 已修正 (2024-12-08) +- [x] UI命名不一致(UI_PresonalCenter_dd_Detail有拼寫錯誤)- 已修正 (2024-12-08) +- [ ] 部分UI功能重複可能需要合併(多個Result相關UI) + +## 🤖 與 Claude 協作提醒 +- [ ] 每次請 Claude 做事時,提醒他記錄遇到的問題 +- [ ] 定期檢查 Claude 是否有發現新問題需要記錄 +- [ ] 如果 Claude 發現規格不確定或衝突,立即記錄到對應優先級區域 +- [ ] Claude 實作功能時發現的技術難題也要記錄 +- [ ] 請 Claude 在完成任務後總結發現的問題 + +## ✅ 已解決 +- [x] 建立問題追蹤系統 (2024-12-08) + +--- + +## 💡 快速記錄格式 + +### 新問題格式: +``` +- [ ] 問題描述 (優先級: 🔥緊急/⚠️重要/📝一般) + - 檔案: path/to/file.md:line + - 影響: 描述影響 + - 想法: 可能的解決方向 +``` + +### 更新問題: +1. 解決後將 `[ ]` 改為 `[x]` +2. 移到「已解決」區域 +3. 加上解決日期 + +### 每週回顧: +- 檢查緊急問題是否有進展 +- 將已解決問題歸檔 +- 評估是否有新問題需要添加 + +--- + +## 🎯 使用建議 + +**發現問題時**:直接編輯此檔案,用一行話記錄問題 + +**處理問題時**:勾選checkbox,移動到對應區域 + +**定期回顧**:每週花5分鐘整理一次 + +**簡單就好**:不需要複雜的格式,重點是快速記錄和追蹤 \ No newline at end of file diff --git a/README-問題管理.md b/README-問題管理.md new file mode 100644 index 0000000..7354b23 --- /dev/null +++ b/README-問題管理.md @@ -0,0 +1,142 @@ +# 🚨 Drama Ling 問題管理系統 + +## 🎯 統一入口點 + +### 🎭 **主命令** (推薦) +```bash +./drama # 顯示所有可用命令 +./drama issue # 管理問題 +./drama check # 檢查問題狀態 +./drama report "標題" # 建立分析報告 +./drama consistency # 一致性檢查 +./drama all # 執行全部檢查 +``` + +## 💫 其他使用方式 + +### 1️⃣ **直接使用工具** (進階) +```bash +./tools/issue.sh # 直接使用問題管理工具 +./tools/check_issues.sh # 直接檢查問題狀態 +``` + +### 2️⃣ **VS Code 快捷鍵** (推薦進階使用者) +- `Cmd+Shift+I` - 📝 記錄問題 +- `Cmd+Shift+S` - 📊 查看狀態 +- `Cmd+Shift+C` - 🔍 一致性檢查 +- `Cmd+Shift+A` - 🚀 全部檢查 + +### 3️⃣ **全域命令** (最方便) +```bash +# 先執行一次設置 +./drama setup + +# 重啟終端機後,在任何地方都能用: +dl # 主選單 +dl-issue # 記錄問題 +dl-check # 查看狀態 +dl-report # 建立報告 +dl-consistency # 一致性檢查 +dl-all # 全部檢查 +``` + +## 🚀 快速開始 + +### 第一次使用: +1. 打開終端機 +2. `cd /Users/jettcheng1018/code/dramaling-app` +3. `./drama` 查看所有命令 +4. `./drama issue` 開始管理問題 + +### 日常使用: +```bash +# 有問題時 +./drama issue → 選1 → 輸入問題 → 選優先級 + +# 想查狀態時 +./drama check + +# 建立分析報告 +./drama report "問題分析標題" + +# 執行系統檢查 +./drama all +``` + +## 📋 問題優先級 + +- 🔥 **緊急** - 阻擋開發的嚴重問題 +- ⚠️ **重要** - 影響進度的重要問題 +- 📝 **一般** - 可以延後的問題 + +## ✅ 解決問題 + +**方法1 - 用工具:** +`./issue.sh` → 選3 → 查看問題列表 → 手動編輯檔案 + +**方法2 - 直接編輯:** +打開 `ISSUES.md`,把 `[ ]` 改成 `[x]`,移到「已解決」區域 + +## 🔧 故障排除 + +### 權限問題: +```bash +chmod +x issue.sh +chmod +x setup_aliases.sh +``` + +### 找不到檔案: +```bash +# 確認在正確目錄 +pwd +# 應該顯示: /Users/jettcheng1018/code/dramaling-app +``` + +### VS Code 快捷鍵無效: +1. 重啟 VS Code +2. 檢查是否在專案根目錄開啟 VS Code + +## 💡 使用技巧 + +### 快速記錄: +- 發現問題立即記錄,不要拖延 +- 描述要具體,包含檔案位置 +- 優先級要準確判斷 + +### 定期回顧: +- 每週檢查一次狀態 +- 將已解決問題移到完成區域 +- 評估緊急問題是否需要立即處理 + +### 團隊協作: +- 問題描述要清楚,讓其他人也能理解 +- 相關檔案路徑要完整 +- 解決後記錄解決方案 + +## 📁 相關檔案 + +### 核心系統 +- `drama` - 🎭 統一入口點腳本 +- `ISSUES.md` - 主要問題追蹤檔案 +- `reports/` - 結構化報告目錄 + +### 工具目錄 +- `tools/issue.sh` - 互動式問題管理工具 +- `tools/check_issues.sh` - 快速狀態檢查 +- `tools/create_report.sh` - 快速建立報告工具 +- `tools/check_reports.sh` - 報告狀態檢查 +- `tools/setup_aliases.sh` - 全域命令設置 + +### VS Code 整合 +- `.vscode/tasks.json` - VS Code 任務設定 +- `.vscode/keybindings.json` - VS Code 快捷鍵 + +### 維護系統 +- `scripts/maintenance_manager.sh` - 系統檢查主腳本 +- `scripts/maintenance/` - 各種檢查腳本目錄 + +--- + +**🎉 現在您有了一個超級簡單好用的問題管理系統!** + +遇到問題就記錄,定期檢查狀態,讓專案開發更順暢! \ No newline at end of file diff --git a/docs/01_requirement/system_structure_design.json b/docs/01_requirement/system_structure_design.json index cecb917..608e86a 100644 --- a/docs/01_requirement/system_structure_design.json +++ b/docs/01_requirement/system_structure_design.json @@ -1615,7 +1615,7 @@ ] }, { - "view_id": "UI_PresonalCenter_dd_Detail", + "view_id": "UI_PersonalCenter_dd_Detail", "name": "個人中心詳細資料", "type": "Detail", "goal": "顯示詳細個人學習資料", @@ -2066,7 +2066,7 @@ ] }, { - "view_id": "UI_ChallengeLevel_ChoosePopup-1", + "view_id": "UI_ChallengeLevel_ChoosePopup1", "name": "挑戰關卡選擇彈窗變體1", "type": "Modal", "goal": "讓用戶選擇關卡難度或模式(變體1)", @@ -2089,7 +2089,7 @@ ] }, { - "view_id": "UI_ChallengeLevel_ChoosePopup-2", + "view_id": "UI_ChallengeLevel_ChoosePopup2", "name": "挑戰關卡選擇彈窗變體2", "type": "Modal", "goal": "讓用戶選擇關卡難度或模式(變體2)", diff --git a/docs/04_technical/document-consistency-checklist.md b/docs/04_technical/document-consistency-checklist.md new file mode 100644 index 0000000..f7e1f21 --- /dev/null +++ b/docs/04_technical/document-consistency-checklist.md @@ -0,0 +1,178 @@ +# 文檔一致性檢查清單 + +## 檢查目的 +確保Drama Ling專案中所有文檔在功能規格、技術架構、UI設計、商業邏輯等方面保持一致,避免開發過程中的衝突和混淆。 + +## 📋 一致性檢查清單 + +### 1. 功能規格一致性 + +#### 1.1 模組架構一致性 +- [ ] requirements.md中的4大模組 ↔ system_structure_design.json中的modules +- [ ] 模組功能描述是否一致 +- [ ] 介面數量統計是否匹配(ENT:15, CORE:23, TASK:38, BIZ:12) + +**檢查項目:** +```bash +# 檢查模組定義 +grep "### [0-9]\." docs/01_requirement/requirements.md +grep "module_name" docs/01_requirement/system_structure_design.json +``` + +#### 1.2 功能特性對照 +- [ ] requirements.md中提到的功能 ↔ system_structure_design.json中的features +- [ ] 功能描述和目標是否一致 +- [ ] 資料綁定是否合理 + +#### 1.3 UI流程一致性 +- [ ] requirements.md功能 ↔ user-flow-specification.md流程 +- [ ] system_structure_design.json中的view_ids ↔ user flow中引用的UI +- [ ] 導航邏輯是否匹配 + +### 2. 技術架構一致性 + +#### 2.1 技術選型對照 +- [ ] tech-stack-decision.md ↔ database-schema.md技術選擇 +- [ ] tech-stack-decision.md ↔ api-specifications.md技術實現 +- [ ] tech-stack-decision.md ↔ third-party-integration-specification.md整合方案 + +#### 2.2 資料架構一致性 +- [ ] system_structure_design.json中的data_binding ↔ database-schema.md表結構 +- [ ] API規格中的資料模型 ↔ 資料庫設計 +- [ ] 第三方整合的資料流 ↔ 資料庫欄位 + +#### 2.3 API設計一致性 +- [ ] user-flow-specification.md流程 ↔ api-specifications.md端點 +- [ ] business-logic-rules.md規則 ↔ API業務邏輯 +- [ ] 第三方API ↔ 內部API設計 + +### 3. UI/UX設計一致性 + +#### 3.1 介面規格對照 +- [ ] system_structure_design.json中的UI ↔ ui-ux-guidelines.md設計規範 +- [ ] user-flow-specification.md流程 ↔ 實際UI設計檔案 +- [ ] ui-design-tasks.md任務 ↔ 現有UI檔案 + +#### 3.2 互動設計一致性 +- [ ] user flow中的互動邏輯 ↔ UI components的互動設計 +- [ ] navigation_view_id ↔ 實際導航邏輯 +- [ ] 遊戲化元素 ↔ gamification-mechanics.md + +### 4. 商業邏輯一致性 + +#### 4.1 營收模式對照 +- [ ] requirements.md營收模式 ↔ business-logic-rules.md商業規則 +- [ ] 鑽石貨幣系統 ↔ 第三方支付整合 +- [ ] 訂閱模式 ↔ 用戶權限管理 + +#### 4.2 遊戲機制一致性 +- [ ] requirements.md遊戲化機制 ↔ gamification-mechanics.md詳細規則 +- [ ] user flow中的遊戲邏輯 ↔ 資料庫設計 +- [ ] AI演算法需求 ↔ ai-algorithm-specs.md + +### 5. 開發計劃一致性 + +#### 5.1 功能優先級 +- [ ] requirements.md功能重要性 ↔ 各文檔中的實作優先級 +- [ ] MVP定義 ↔ 技術實作複雜度 +- [ ] 時程安排 ↔ 資源分配 + +#### 5.2 相依關係 +- [ ] 功能間的相依關係是否一致 +- [ ] 技術實作的前置需求 +- [ ] 第三方整合的時程安排 + +## 🔍 檢查方法建議 + +### 自動化檢查工具 + +#### 1. 關鍵詞對照檢查 +```bash +# 創建關鍵詞檢查腳本 +#!/bin/bash + +# 檢查UI名稱一致性 +echo "=== UI名稱一致性檢查 ===" +grep -o "UI_[A-Za-z_]*" docs/01_requirement/system_structure_design.json | sort | uniq > /tmp/system_uis.txt +grep -o "UI_[A-Za-z_]*" docs/04_technical/user-flow-specification.md | sort | uniq > /tmp/flow_uis.txt +diff /tmp/system_uis.txt /tmp/flow_uis.txt + +# 檢查模組ID一致性 +echo "=== 模組ID一致性檢查 ===" +grep -o "MD_[A-Za-z_]*" docs/01_requirement/system_structure_design.json | sort | uniq +``` + +#### 2. 數量統計檢查 +```bash +# 介面數量統計 +echo "=== 介面數量統計 ===" +echo "Requirements.md宣告的介面數:" +grep -o "([A-Z]* - [0-9]*.個介面)" docs/01_requirement/requirements.md + +echo "System design實際UI數:" +grep -c "view_id" docs/01_requirement/system_structure_design.json +``` + +#### 3. 交叉引用檢查 +```bash +# 檢查未被引用的UI +echo "=== 未被引用的UI檢查 ===" +# 比較system design中定義的UI與user flow中實際使用的UI +``` + +### 手動檢查清單 + +#### 1. 商業邏輯對照表 +| 功能 | requirements.md | business-logic-rules.md | system_structure_design.json | 狀態 | +|------|-----------------|--------------------------|-------------------------------|------| +| 鑽石購買系統 | ✓ | ✓ | ✓ | 一致 | +| 生命值系統 | ✓ | ? | ✓ | 待檢查 | +| 限時挑戰 | ✓ | ? | ✓ | 待檢查 | + +#### 2. 技術選型對照表 +| 技術領域 | tech-stack-decision.md | database-schema.md | api-specifications.md | 狀態 | +|----------|------------------------|--------------------|-----------------------|------| +| 資料庫 | PostgreSQL | PostgreSQL | PostgreSQL | 一致 | +| 後端框架 | .NET Core | - | .NET Core | 一致 | +| 前端框架 | Flutter | - | - | 一致 | + +#### 3. UI流程對照表 +| 功能流程 | requirements.md | user-flow-specification.md | system_structure_design.json | 狀態 | +|----------|-----------------|----------------------------|-------------------------------|------| +| 用戶引導 | 7步驟流程 | ✓ 完整流程 | ✓ 7個UI | 一致 | +| 對話系統 | 9個介面 | ✓ 完整流程 | ✓ 對應UI | 一致 | + +## 📊 一致性檢查報告模板 + +### 檢查結果總覽 +- **功能規格一致性**: ✅ 通過 / ⚠️ 部分問題 / ❌ 嚴重不一致 +- **技術架構一致性**: ✅ 通過 / ⚠️ 部分問題 / ❌ 嚴重不一致 +- **UI/UX設計一致性**: ✅ 通過 / ⚠️ 部分問題 / ❌ 嚴重不一致 +- **商業邏輯一致性**: ✅ 通過 / ⚠️ 部分問題 / ❌ 嚴重不一致 +- **開發計劃一致性**: ✅ 通過 / ⚠️ 部分問題 / ❌ 嚴重不一致 + +### 發現的問題清單 +1. **問題描述**: [具體描述不一致之處] + - **影響程度**: 高/中/低 + - **涉及文檔**: [列出相關文檔] + - **建議解決方案**: [具體修正建議] + +### 修正優先級建議 +1. **高優先級**: 影響開發進度的關鍵不一致 +2. **中優先級**: 可能造成混淆的不一致 +3. **低優先級**: 文檔表達方式的不一致 + +## 🔄 定期檢查建議 + +### 檢查頻率 +- **文檔更新後**: 立即進行相關部分的一致性檢查 +- **每週檢查**: 快速掃描關鍵不一致點 +- **階段性檢查**: 開發里程碑前的全面一致性檢查 +- **上線前檢查**: 最終的全面文檔一致性驗證 + +### 檢查責任分工 +- **需求分析師**: 功能規格一致性 +- **系統架構師**: 技術架構一致性 +- **UI/UX設計師**: 介面設計一致性 +- **產品經理**: 商業邏輯一致性 +- **項目經理**: 開發計劃一致性 \ No newline at end of file diff --git a/docs/04_technical/issues-tracking.md b/docs/04_technical/issues-tracking.md new file mode 100644 index 0000000..7686b12 --- /dev/null +++ b/docs/04_technical/issues-tracking.md @@ -0,0 +1,279 @@ +# Drama Ling 問題追蹤系統 + +## 🎯 系統目的 +管理專案中的規格不確定性、衝突、待辦事項和問題追蹤。 + +## 📊 問題分類 + +### 🔴 Critical (嚴重) +影響核心功能或架構的問題 +- 資料庫設計衝突 +- API 架構不一致 +- 安全性漏洞 + +### 🟡 Important (重要) +影響開發進度的問題 +- UI/UX 設計不確定 +- 功能需求模糊 +- 技術選型待定 + +### 🔵 Normal (一般) +可延後處理的問題 +- 文檔不完整 +- 小功能細節待定 +- 效能優化建議 + +### 🟢 Low (輕微) +不影響開發的改進 +- 程式碼風格統一 +- 註解補充 +- 文件格式調整 + +## 🏷️ 問題標籤 + +### 狀態標籤 +- `status:open` - 未解決 +- `status:in-progress` - 處理中 +- `status:resolved` - 已解決 +- `status:closed` - 已關閉 +- `status:blocked` - 被阻擋 + +### 類型標籤 +- `type:spec` - 規格問題 +- `type:conflict` - 衝突問題 +- `type:missing` - 缺失資訊 +- `type:clarification` - 需要澄清 +- `type:decision` - 待決定 +- `type:bug` - 錯誤 +- `type:enhancement` - 改進建議 + +### 模組標籤 +- `module:auth` - 認證系統 +- `module:learning` - 學習內容 +- `module:ui` - 使用者介面 +- `module:api` - API 規格 +- `module:db` - 資料庫 +- `module:docs` - 文檔 + +## 📋 問題追蹤格式 + +```markdown +## Issue #001 - [簡短標題] + +**優先級**: 🔴 Critical / 🟡 Important / 🔵 Normal / 🟢 Low +**狀態**: Open +**標籤**: `type:spec` `module:api` `status:open` +**建立日期**: 2024-12-08 +**負責人**: [指派人員] +**預計解決**: [日期] + +### 問題描述 +詳細描述問題的內容、影響範圍和背景資訊。 + +### 相關文件 +- 檔案: `docs/01_requirement/system_structure_design.json:45` +- 檔案: `docs/04_technical/api-specifications.md:332-416` + +### 可能解決方案 +1. 方案A: [描述] + - 優點: [列出] + - 缺點: [列出] + +2. 方案B: [描述] + - 優點: [列出] + - 缺點: [列出] + +### 決議 +[最終決定的解決方案和理由] + +### 執行紀錄 +- 2024-12-08: 建立問題 +- 2024-12-09: 調查相關文件 +- 2024-12-10: 提出解決方案 + +--- +``` + +## 🔄 工作流程 + +### 1. 問題發現 +- 在文檔檢查中發現 +- 開發過程中遇到 +- 團隊討論提出 +- 自動檢查工具發現 + +### 2. 問題記錄 +```bash +# 使用腳本快速建立問題 +./scripts/maintenance/create_issue.sh "API endpoint conflict in user module" +``` + +### 3. 問題分類 +- 設定優先級和標籤 +- 指派負責人 +- 設定預計解決日期 + +### 4. 問題追蹤 +- 定期檢查進度 +- 更新狀態 +- 記錄解決過程 + +### 5. 問題解決 +- 實施解決方案 +- 更新相關文檔 +- 驗證解決效果 +- 關閉問題 + +## 📝 常見問題類型 + +### API 規格問題 +- 端點命名不一致 +- 參數定義模糊 +- 回應格式衝突 +- 錯誤碼重複 + +### 資料庫設計問題 +- 表格關聯不清楚 +- 欄位型態待定 +- 索引策略未定 +- 資料遷移方案 + +### UI/UX 設計問題 +- 頁面流程不確定 +- 元件命名衝突 +- 互動行為模糊 +- 響應式設計待定 + +### 功能需求問題 +- 業務邏輯不明確 +- 使用者權限設計 +- 效能需求未定 +- 相容性要求 + +## 🛠️ 管理工具 + +### 問題檢查腳本 +```bash +# 檢查未解決問題 +./scripts/maintenance/check_open_issues.sh + +# 生成問題報告 +./scripts/maintenance/generate_issue_report.sh + +# 檢查逾期問題 +./scripts/maintenance/check_overdue_issues.sh +``` + +### 問題統計 +- 每週問題報告 +- 解決效率統計 +- 問題類型分析 +- 模組問題分布 + +--- + +## Issue #009 - API模組化文檔中有7個待建立的模組 + +**優先級**: 🟡 Important +**狀態**: Open +**標籤**: `type:spec` `module:api` `status:open` +**建立日期**: 2024-12-08 +**負責人**: [待指派] +**預計解決**: [待設定] + +### 問題描述 +根據 api-specifications.md 文檔,有7個API模組尚未建立: +- 學習內容API (第332-416行) +- 對話練習API (第615-776行) +- 詞彙系統API (第417-614行) +- 遊戲化系統API (第98-252行,第777-930行,第1791-1867行) +- 訂閱系統API (第1868-2188行) +- 特殊任務API (第1142-1447行) +- 語言程度API (第1448-1790行) + +### 相關文件 +- 檔案: `docs/04_technical/api-specifications.md:37-46` + +### 可能解決方案 +1. 方案A: 逐一建立各模組文檔 + - 優點: 結構清晰,便於維護 + - 缺點: 工作量較大 + +2. 方案B: 先建立關鍵模組,其他延後 + - 優點: 快速開發核心功能 + - 缺點: 可能導致架構不完整 + +### 決議 +[待決定] + +### 執行紀錄 +- 2024-12-08: 建立問題 + +--- + +## Issue #010 - System Design與User Flow的UI名稱存在差異 + +**優先級**: 🔵 Normal +**狀態**: Open +**標籤**: `type:conflict` `module:ui` `status:open` +**建立日期**: 2024-12-08 +**負責人**: [待指派] +**預計解決**: [待設定] + +### 問題描述 +從一致性檢查發現,System Design和User Flow之間的UI命名存在差異,可能導致開發時的混淆。 + +### 相關文件 +- 檔案: `docs/01_requirement/system_structure_design.json` +- 檔案: `docs/04_technical/user-flow-specification.md` + +### 可能解決方案 +1. 統一UI命名規範 +2. 建立UI命名對照表 +3. 更新一致性檢查規則 + +### 決議 +[待決定] + +### 執行紀錄 +- 2024-12-08: 建立問題 + +## 📊 問題追蹤看板 + +### 待處理 (Backlog) +- Issue #001: API endpoint naming conflicts +- Issue #003: Database schema uncertainties +- Issue #005: UI component specifications + +### 進行中 (In Progress) +- Issue #002: User authentication flow +- Issue #004: Learning content API design + +### 待驗證 (Review) +- Issue #006: Subscription model conflicts + +### 已完成 (Done) +- Issue #007: Error handling standardization ✅ +- Issue #008: API response format unification ✅ + +## 🔍 問題搜尋 + +### 依優先級搜尋 +```bash +grep "🔴 Critical" docs/04_technical/issues-tracking.md +``` + +### 依模組搜尋 +```bash +grep "module:api" docs/04_technical/issues-tracking.md +``` + +### 依狀態搜尋 +```bash +grep "status:open" docs/04_technical/issues-tracking.md +``` + +--- + +**更新日期**: 2024-12-08 +**維護人員**: Drama Ling 開發團隊 \ No newline at end of file diff --git a/docs/04_technical/quick-consistency-check.md b/docs/04_technical/quick-consistency-check.md new file mode 100644 index 0000000..e06dfee --- /dev/null +++ b/docs/04_technical/quick-consistency-check.md @@ -0,0 +1,125 @@ +# 快速一致性檢查表 + +## 🔍 檢查結果總結 + +**執行日期**: 2025-09-07 +**整體評分**: 7.1/10 (良好) +**評級**: 建議修正部分問題後開發 + +## ⚠️ 發現的主要問題 + +### 1. UI介面數量不一致 (高優先級) +- **問題**: Requirements.md宣告88個介面,System Design實際有100個 +- **差異**: 多出12個介面 +- **影響**: 可能影響開發計劃和資源估算 +- **建議**: 更新requirements.md或精簡system design + +### 2. UI命名不一致 (中優先級) +- **問題**: 32個UI存在命名差異 +- **主要差異**: + - System Design有但User Flow沒有:UI_Account_List, UI_BadgeCollection 等 + - User Flow有但System Design沒有:UI_Cost_Confirm_Popup, UI_LifePoints_Display 等 +- **影響**: 開發時可能造成混淆 +- **建議**: 統一UI命名規範 + +## ✅ 表現優秀的領域 + +1. **模組架構一致性**: 完美匹配 (4個模組) +2. **功能特性定義**: 19個特性分布合理 +3. **技術選型一致性**: Flutter、PostgreSQL、.NET等技術選擇一致 +4. **API端點設計**: 89個端點涵蓋完整 + +## 📋 修正建議優先級 + +### 🔴 高優先級 (開發前必須解決) +1. **統一UI介面數量** + - [ ] 決定是保留88個還是100個介面 + - [ ] 更新requirements.md的介面數量統計 + - [ ] 確認多出的12個UI是否必要 + +### 🟡 中優先級 (開發過程中解決) +1. **統一UI命名** + - [ ] 建立UI命名標準文檔 + - [ ] 更新user-flow-specification.md中的UI引用 + - [ ] 確保所有文檔使用相同的UI名稱 + +2. **完善功能分布** + - [ ] 檢查ENT模組只有1個功能是否合理 + - [ ] 平衡各模組的功能分配 + +### 🟢 低優先級 (持續改進) +1. **增強資料庫對應** + - [ ] 確保data_binding與資料表完全對應 + - [ ] 補充缺失的資料綁定關係 + +## 🛠️ 執行方法建議 + +### 立即執行 (1-2天) +```bash +# 1. 執行一致性檢查 +./check_consistency.sh + +# 2. 檢查具體UI差異 +grep -o "UI_[A-Za-z_]*" docs/04_technical/user-flow-specification.md | sort | uniq > user_flow_uis.txt +grep -o '"view_id": "UI_[^"]*"' docs/01_requirement/system_structure_design.json | sed 's/"view_id": "//g' | sed 's/"//g' | sort > system_uis.txt +diff user_flow_uis.txt system_uis.txt +``` + +### 定期執行 (每週) +```bash +# 設置定期檢查 +crontab -e +# 添加: 0 9 * * 1 cd /path/to/project && ./check_consistency.sh > consistency_report.txt +``` + +## ✅ 檢查清單模板 + +### 功能規格一致性 +- [ ] 4大模組定義一致 (ENT/CORE/TASK/BIZ) +- [ ] 介面數量統計一致 (88 vs 100個) +- [ ] 功能特性描述匹配 +- [ ] 用戶流程完整覆蓋 + +### 技術架構一致性 +- [ ] Flutter + .NET + PostgreSQL 選型一致 +- [ ] API端點與功能需求匹配 +- [ ] 資料庫結構支援所有功能 +- [ ] 第三方整合方案具體 + +### UI/UX設計一致性 +- [ ] UI命名規範統一 +- [ ] 導航邏輯一致 +- [ ] 設計系統完整 +- [ ] 響應式設計考量 + +### 商業邏輯一致性 +- [ ] 鑽石貨幣系統規則清楚 +- [ ] 訂閱模式定義一致 +- [ ] 遊戲化機制完整 +- [ ] 付費流程設計合理 + +## 🎯 下一步行動計劃 + +### 本週目標 +1. 修正UI介面數量不一致問題 +2. 統一關鍵UI的命名 +3. 補充ENT模組的功能定義 + +### 下週目標 +1. 完善資料庫對應關係 +2. 更新API規格對應功能 +3. 進行全面一致性復查 + +### 開發前最終檢查 +1. 執行完整一致性檢查 +2. 確認評分達到8.0以上 +3. 所有高優先級問題已解決 + +## 📊 追蹤進度 + +| 問題類型 | 狀態 | 負責人 | 預計完成 | +|----------|------|---------|----------| +| UI數量統一 | 待處理 | 產品經理 | 本週 | +| UI命名統一 | 待處理 | UI設計師 | 下週 | +| 功能分布平衡 | 待處理 | 系統架構師 | 下週 | +| 資料庫對應 | 待處理 | 後端開發 | 下下週 | \ No newline at end of file diff --git a/drama b/drama new file mode 100755 index 0000000..14fd7af --- /dev/null +++ b/drama @@ -0,0 +1,84 @@ +#!/bin/bash + +# Drama Ling 專案管理工具 - 統一入口點 +# 使用方法: ./drama [命令] + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +TOOLS_DIR="$SCRIPT_DIR/tools" + +# 顏色定義 +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +PURPLE='\033[0;35m' +NC='\033[0m' + +# 顯示主選單 +show_menu() { + echo -e "${BLUE}🎭 Drama Ling 專案管理工具${NC}" + echo "==================================" + echo "" + echo -e "${PURPLE}📋 問題管理${NC}" + echo " issue - 互動式問題管理" + echo " check - 檢查問題狀態" + echo "" + echo -e "${PURPLE}📊 報告系統${NC}" + echo " report - 建立分析報告" + echo " decision - 建立決策記錄" + echo " reports - 檢查報告狀態" + echo "" + echo -e "${PURPLE}🔧 系統檢查${NC}" + echo " consistency - 執行一致性檢查" + echo " all - 執行全部檢查" + echo "" + echo -e "${PURPLE}⚙️ 系統設置${NC}" + echo " setup - 設置全域命令別名" + echo " help - 顯示此幫助" + echo "" + echo -e "${BLUE}範例:${NC}" + echo " ./drama issue # 管理問題" + echo " ./drama report \"API分析\" # 建立分析報告" + echo " ./drama check # 檢查問題狀態" +} + +# 主邏輯 +case "$1" in + "issue") + exec "$TOOLS_DIR/issue.sh" + ;; + "check") + exec "$TOOLS_DIR/check_issues.sh" + ;; + "report") + shift + exec "$TOOLS_DIR/create_report.sh" analysis "$@" + ;; + "decision") + shift + exec "$TOOLS_DIR/create_report.sh" decision "$@" + ;; + "reports") + exec "$TOOLS_DIR/check_reports.sh" + ;; + "consistency") + exec "$SCRIPT_DIR/scripts/maintenance_manager.sh" consistency + ;; + "all") + exec "$SCRIPT_DIR/scripts/maintenance_manager.sh" all + ;; + "setup") + exec "$TOOLS_DIR/setup_aliases.sh" + ;; + "help"|"--help"|"-h") + show_menu + ;; + "") + show_menu + ;; + *) + echo -e "${YELLOW}❌ 未知命令: $1${NC}" + echo "" + show_menu + exit 1 + ;; +esac \ No newline at end of file diff --git a/reports/README.md b/reports/README.md new file mode 100644 index 0000000..fe539b6 --- /dev/null +++ b/reports/README.md @@ -0,0 +1,85 @@ +# 📊 Drama Ling 報告管理系統 + +## 📁 目錄結構 + +``` +reports/ +├── analysis/ # 問題分析報告 +├── decisions/ # 技術決策記錄 +├── templates/ # 報告模板 +├── archive/ # 已歸檔報告 +└── README.md # 本文件 +``` + +## 🔄 報告與問題系統整合 + +每個分析報告都會在 `ISSUES.md` 中建立對應的問題追蹤項目,包含: +- 問題描述 +- 報告連結 +- 解決狀態 +- 後續行動 + +## 📝 報告命名規範 + +### 分析報告 (analysis/) +格式:`YYYY-MM-DD_[問題類型]-analysis.md` + +範例: +- `2024-12-08_UI-consistency-analysis.md` +- `2024-12-15_API-modules-analysis.md` +- `2024-12-22_database-schema-analysis.md` + +### 決策記錄 (decisions/) +格式:`YYYY-MM-DD_[決策主題]-decision.md` + +範例: +- `2024-12-08_UI-naming-standards-decision.md` +- `2024-12-15_tech-stack-decision.md` + +## 🎯 報告生命週期 + +1. **建立階段** + - 在 analysis/ 目錄建立報告 + - 在 ISSUES.md 中建立對應問題項目 + - 連結報告到問題 + +2. **追蹤階段** + - 定期更新問題狀態 + - 記錄解決進度 + - 更新後續行動 + +3. **完成階段** + - 標記問題為已解決 + - 將重要決策記錄移到 decisions/ + - 將過時報告移到 archive/ + +## 🛠️ 報告管理工具 + +### 快速建立報告 +```bash +./create_report.sh analysis "UI consistency check" +./create_report.sh decision "Tech stack selection" +``` + +### 檢查報告狀態 +```bash +./check_reports.sh +``` + +### 歸檔舊報告 +```bash +./archive_reports.sh 30 # 歸檔30天前的報告 +``` + +## 📋 報告模板 + +### 分析報告模板 +- [analysis-template.md](./templates/analysis-template.md) + +### 決策記錄模板 +- [decision-template.md](./templates/decision-template.md) + +--- + +**維護團隊**: Drama Ling 開發團隊 +**更新日期**: 2024-12-08 \ No newline at end of file diff --git a/reports/analysis/2024-12-08_UI-consistency-analysis.md b/reports/analysis/2024-12-08_UI-consistency-analysis.md new file mode 100644 index 0000000..ddce761 --- /dev/null +++ b/reports/analysis/2024-12-08_UI-consistency-analysis.md @@ -0,0 +1,183 @@ +# System Design 與 User Flow UI 名稱不一致分析報告 + +## 📊 檢查結果總覽 + +### 數據統計 +- **System Design UI 總數**: 100個 +- **User Flow UI 總數**: 68個 +- **共同 UI 數量**: 61個 +- **System Design 獨有**: 39個 +- **User Flow 獨有**: 7個 + +### 問題嚴重性評估 +🔴 **嚴重問題**: System Design 有39個UI在 User Flow 中未定義,占39% +🟡 **中等問題**: User Flow 有7個UI在 System Design 中未定義,占10.3% +🟢 **命名問題**: 發現拼寫錯誤和格式不一致 + +## 🔍 詳細差異分析 + +### 1. System Design 獨有的UI (39個) + +#### 帳戶管理相關 +- `UI_Account_List` - 帳戶列表 +- `UI_Account_Option` - 帳戶選項 + +#### 對話糾正系統 +- `UI_Correction_Fluency_Practice` - 流暢度練習 +- `UI_Correction_Grammar_Retry` - 語法重試 +- `UI_Correction_Pass_Result` - 通過結果 +- `UI_Correction_Retry_Result` - 重試結果 +- `UI_DialogCorrection_FluencyExplanation_Play` - 流暢度解釋播放 +- `UI_DialogCorrection_FluencyPass_Result` - 流暢度通過結果 +- `UI_DialogCorrection_FluencyRetry_Play` - 流暢度重試播放 + +#### 等級結果系統 +- `UI_LevelResult_CorrectionResult` - 糾正結果 +- `UI_LevelResult_DialogScoreSummary` - 對話分數總結 +- `UI_LevelResult_FailResult2` - 失敗結果2 +- `UI_LevelResult_RewardConfirm` - 獎勵確認 +- `UI_LevelResult_ScoreSummary` - 分數總結 +- `UI_LevelResult_ScoreSummary2` - 分數總結2 +- `UI_LevelResult_SmallReward` - 小獎勵 +- `UI_LevelResult_SuccessResult2` - 成功結果2 + +#### 複習系統 +- `UI_ReviewCards` - 複習卡片 +- `UI_ReviewProgress` - 複習進度 +- `UI_ReviewSchedule` - 複習排程 + +#### 社交功能 +- `UI_Social_Friends` - 社交朋友 +- `UI_Social_Profile` - 社交檔案 +- `UI_Social_Search` - 社交搜尋 + +#### 詞彙系統結果 +- `UI_VocabFluency_MatchImageResult` - 詞彙流暢度圖片匹配結果 +- `UI_VocabFluency_SentenceResult` - 詞彙流暢度句子結果 +- `UI_VocabIntro_ChoiceResult` - 詞彙介紹選擇結果 +- `UI_Vocab_Choice_Results` - 詞彙選擇結果 +- `UI_Vocab_Fluency_Results` - 詞彙流暢度結果 +- `UI_Vocab_Sentence_Results` - 詞彙句子結果 + +### 2. User Flow 獨有的UI (7個) + +#### 成本確認 +- `UI_Cost_Confirm_Popup` - 成本確認彈窗 + +#### 資源不足 +- `UI_Insufficient_Resources` - 資源不足 + +#### 等級結果 +- `UI_LevelResult_SuccessResult` - 成功結果 + +#### 生命點數 +- `UI_LifePoints_Display` - 生命點數顯示 + +#### 商店確認 +- `UI_Shop_Item_Confirm` - 商店項目確認 + +#### 訂閱成功 +- `UI_Subscription_Success` - 訂閱成功 + +#### 時光系統 +- `UI_TimeWarp_Cards` - 時光卡片 + +## 🚨 發現的問題 + +### 拼寫錯誤 +1. `UI_PresonalCenter_dd_Detail` → 應為 `UI_PersonalCenter_dd_Detail` + +### 命名格式不一致 +1. `UI_ChallengeLevel_ChoosePopup-1` - 包含連字號 +2. `UI_ChallengeLevel_ChoosePopup-2` - 包含連字號 + +### 功能重複可能性 +1. 多個 `LevelResult_*` UI 可能功能重複 +2. 多個 `Vocab_*_Results` UI 可能可以合併 + +## 💡 統一建議 + +### 短期解決方案 (立即執行) + +#### 1. 修正拼寫錯誤 +```json +// 在 system_structure_design.json 中 +"UI_PresonalCenter_dd_Detail" → "UI_PersonalCenter_dd_Detail" +``` + +#### 2. 統一命名格式 +```json +// 移除特殊字符 +"UI_ChallengeLevel_ChoosePopup-1" → "UI_ChallengeLevel_ChoosePopup1" +"UI_ChallengeLevel_ChoosePopup-2" → "UI_ChallengeLevel_ChoosePopup2" +``` + +#### 3. 在 User Flow 中補充缺失的重要UI +優先補充以下核心功能UI: +- 對話糾正系統 (9個UI) +- 等級結果系統 (8個UI) +- 複習系統 (3個UI) + +### 中期解決方案 (1-2週內) + +#### 1. 建立UI命名規範 +- 格式:`UI_[Module]_[Function]_[Type]` +- 類型:Main, Popup, Modal, Result, Detail +- 避免特殊字符和數字後綴 + +#### 2. UI功能重複檢查 +- 合併相似的Result UI +- 統一Popup命名方式 +- 檢查功能重疊的UI + +#### 3. 補全User Flow定義 +- 為所有System Design中的UI撰寫用戶流程 +- 確保每個UI都有明確的觸發條件和導航路徑 + +### 長期解決方案 (1個月內) + +#### 1. 建立UI庫管理系統 +- 建立統一的UI組件清單 +- 定期同步檢查兩個文檔 +- 建立UI變更審核流程 + +#### 2. 自動化檢查工具 +- 將UI一致性檢查加入CI/CD流程 +- 建立UI命名檢查腳本 +- 定期生成差異報告 + +## 🎯 執行優先級 + +### 🔥 緊急 (本週內) +1. 修正拼寫錯誤 +2. 統一命名格式 +3. 補充核心功能UI的用戶流程 + +### ⚠️ 重要 (2週內) +1. 建立UI命名規範 +2. 檢查並合併重複UI +3. 補全所有缺失的User Flow定義 + +### 📝 一般 (1個月內) +1. 建立UI庫管理系統 +2. 實施自動化檢查 +3. 定期維護和更新 + +## 📋 後續追蹤 + +### 檢查清單 +- [ ] 修正 `UI_PresonalCenter_dd_Detail` 拼寫 +- [ ] 移除UI名稱中的特殊字符 +- [ ] 為39個缺失UI撰寫User Flow +- [ ] 建立UI命名規範文檔 +- [ ] 實施定期檢查機制 + +### 成功指標 +- UI一致性率達到95%以上 +- 命名規範遵循率100% +- 新增UI都有對應的用戶流程定義 + +--- + +**報告生成時間**: 2024-12-08 +**下次檢查時間**: 2024-12-15 \ No newline at end of file diff --git a/reports/templates/analysis-template.md b/reports/templates/analysis-template.md new file mode 100644 index 0000000..030db6c --- /dev/null +++ b/reports/templates/analysis-template.md @@ -0,0 +1,99 @@ +# [問題類型] 分析報告 + +## 📊 檢查結果總覽 + +### 基本資訊 +- **分析日期**: YYYY-MM-DD +- **分析範圍**: [描述分析範圍] +- **觸發原因**: [為什麼進行此分析] +- **相關問題**: [ISSUES.md 中的問題編號] + +### 數據統計 +- **項目A總數**: X個 +- **項目B總數**: Y個 +- **差異數量**: Z個 +- **一致性比率**: XX% + +## 🔍 詳細分析 + +### 1. 問題分類 + +#### 🔴 嚴重問題 +- [列出嚴重問題] +- [影響範圍和後果] + +#### 🟡 重要問題 +- [列出重要問題] +- [對開發的影響] + +#### 🟢 輕微問題 +- [列出輕微問題] +- [改進建議] + +### 2. 根因分析 + +#### 問題成因 +1. [主要原因1] +2. [主要原因2] +3. [次要原因] + +#### 風險評估 +- **技術風險**: [描述] +- **時程風險**: [描述] +- **維護風險**: [描述] + +## 💡 解決方案 + +### 短期方案 (立即執行) +- [ ] [解決方案1] +- [ ] [解決方案2] +- [ ] [解決方案3] + +### 中期方案 (1-2週內) +- [ ] [解決方案1] +- [ ] [解決方案2] + +### 長期方案 (1個月內) +- [ ] [解決方案1] +- [ ] [解決方案2] + +## 🎯 實施計劃 + +### 執行優先級 +1. 🔥 **緊急**: [任務列表] +2. ⚠️ **重要**: [任務列表] +3. 📝 **一般**: [任務列表] + +### 成功指標 +- [量化指標1] +- [量化指標2] +- [質化指標] + +### 預期效益 +- **效率提升**: [描述] +- **品質改善**: [描述] +- **維護便利**: [描述] + +## 📋 後續追蹤 + +### 檢查清單 +- [ ] [檢查項目1] +- [ ] [檢查項目2] +- [ ] [檢查項目3] + +### 下次檢查 +- **檢查日期**: [設定日期] +- **檢查範圍**: [描述範圍] +- **負責人**: [指定負責人] + +### 相關文檔 +- [連結到相關技術文檔] +- [連結到決策記錄] +- [連結到實施指南] + +--- + +**報告產生**: [工具/方法] +**報告人**: [姓名] +**審核人**: [姓名] +**檔案位置**: `reports/analysis/YYYY-MM-DD_[類型]-analysis.md` \ No newline at end of file diff --git a/reports/templates/decision-template.md b/reports/templates/decision-template.md new file mode 100644 index 0000000..f6e3434 --- /dev/null +++ b/reports/templates/decision-template.md @@ -0,0 +1,147 @@ +# [決策主題] 技術決策記錄 + +## 📋 決策資訊 + +### 基本資訊 +- **決策日期**: YYYY-MM-DD +- **決策者**: [姓名/團隊] +- **決策狀態**: [提議中/已決定/已實施/已廢棄] +- **相關問題**: [ISSUES.md 中的問題編號] + +### 背景context +- **問題描述**: [需要決策的問題] +- **決策驅動**: [為什麼需要做這個決策] +- **時間限制**: [決策的時間要求] +- **相關利害關係人**: [影響的人員或系統] + +## 🎯 決策內容 + +### 決策聲明 +[一句話總結這個決策] + +### 決策詳情 +[詳細描述決策的內容,包括:] +- **採用方案**: [選擇的解決方案] +- **實施範圍**: [影響的範圍] +- **實施時程**: [預計的時程] + +## 🔍 選項分析 + +### 選項1: [方案名稱] +**描述**: [方案詳細描述] + +**優點**: +- [優點1] +- [優點2] +- [優點3] + +**缺點**: +- [缺點1] +- [缺點2] +- [缺點3] + +**成本**: [時間/人力/資源成本] + +### 選項2: [方案名稱] +**描述**: [方案詳細描述] + +**優點**: +- [優點1] +- [優點2] + +**缺點**: +- [缺點1] +- [缺點2] + +**成本**: [時間/人力/資源成本] + +### 選項3: [方案名稱] +**描述**: [方案詳細描述] + +**優點**: +- [優點1] +- [優點2] + +**缺點**: +- [缺點1] +- [缺點2] + +**成本**: [時間/人力/資源成本] + +## ⚖️ 決策依據 + +### 評估標準 +1. **技術可行性**: [權重X分] +2. **實施成本**: [權重Y分] +3. **維護便利性**: [權重Z分] +4. **擴展性**: [權重W分] + +### 評分矩陣 +| 選項 | 技術可行性 | 實施成本 | 維護便利性 | 擴展性 | 總分 | +|------|-----------|----------|-----------|--------|------| +| 選項1 | X分 | Y分 | Z分 | W分 | 總分 | +| 選項2 | X分 | Y分 | Z分 | W分 | 總分 | +| 選項3 | X分 | Y分 | Z分 | W分 | 總分 | + +### 最終選擇理由 +[詳細解釋為什麼選擇這個方案,包括:] +- **主要考量因素** +- **風險評估** +- **預期效益** + +## 📅 實施計劃 + +### 實施階段 +1. **Phase 1 (Week 1-2)**: [階段1任務] +2. **Phase 2 (Week 3-4)**: [階段2任務] +3. **Phase 3 (Week 5-6)**: [階段3任務] + +### 檢查點 (Milestones) +- [ ] **Milestone 1**: [描述] - [日期] +- [ ] **Milestone 2**: [描述] - [日期] +- [ ] **Milestone 3**: [描述] - [日期] + +### 成功標準 +- [成功標準1] +- [成功標準2] +- [成功標準3] + +## 🚨 風險與應變 + +### 已識別風險 +1. **風險1**: [描述] + - **影響**: [高/中/低] + - **機率**: [高/中/低] + - **應變措施**: [描述] + +2. **風險2**: [描述] + - **影響**: [高/中/低] + - **機率**: [高/中/低] + - **應變措施**: [描述] + +### 回退計劃 +如果此決策需要撤回,將採取以下步驟: +1. [回退步驟1] +2. [回退步驟2] +3. [回退步驟3] + +## 📊 後續追蹤 + +### 監控指標 +- [指標1]: [目標值] +- [指標2]: [目標值] +- [指標3]: [目標值] + +### 檢討時程 +- **第一次檢討**: [日期] +- **第二次檢討**: [日期] +- **最終檢討**: [日期] + +### 學習與改進 +[記錄實施過程中的學習和改進] + +--- + +**決策記錄建立**: [日期] +**最後更新**: [日期] +**檔案位置**: `reports/decisions/YYYY-MM-DD_[主題]-decision.md` \ No newline at end of file diff --git a/scripts/maintenance/check_consistency.sh b/scripts/maintenance/check_consistency.sh new file mode 100755 index 0000000..dfd3a6a --- /dev/null +++ b/scripts/maintenance/check_consistency.sh @@ -0,0 +1,216 @@ +#!/bin/bash + +# Drama Ling 文檔一致性檢查工具 +# 使用方法: ./check_consistency.sh + +echo "🔍 Drama Ling 文檔一致性檢查開始..." +echo "==================================================" + +# 創建臨時目錄 +mkdir -p /tmp/dramaling_check + +# 檢查1: UI名稱一致性 +echo "📋 1. UI名稱一致性檢查" +echo "----------------------------------------" + +# 從system design提取UI +grep -o '"view_id": "UI_[^"]*"' docs/01_requirement/system_structure_design.json | sed 's/"view_id": "//g' | sed 's/"//g' | sort > /tmp/dramaling_check/system_uis.txt + +# 從user flow提取UI +grep -o 'UI_[A-Za-z_]*' docs/04_technical/user-flow-specification.md | sort | uniq > /tmp/dramaling_check/flow_uis.txt + +# 計算數量 +system_ui_count=$(cat /tmp/dramaling_check/system_uis.txt | wc -l) +flow_ui_count=$(cat /tmp/dramaling_check/flow_uis.txt | wc -l) + +echo "System Design中的UI數量: $system_ui_count" +echo "User Flow中的UI數量: $flow_ui_count" + +# 檢查差異 +echo "System Design有但User Flow沒有的UI:" +comm -23 /tmp/dramaling_check/system_uis.txt /tmp/dramaling_check/flow_uis.txt | head -10 + +echo "User Flow有但System Design沒有的UI:" +comm -13 /tmp/dramaling_check/system_uis.txt /tmp/dramaling_check/flow_uis.txt | head -10 + +echo "" + +# 檢查2: 模組架構一致性 +echo "🏗️ 2. 模組架構一致性檢查" +echo "----------------------------------------" + +# 檢查requirements.md中的模組數量 +req_modules=$(grep -c "### [0-9]\. " docs/01_requirement/requirements.md) +echo "Requirements.md中定義的模組數: $req_modules" + +# 檢查system design中的模組數量 +sys_modules=$(grep -c '"module_name":' docs/01_requirement/system_structure_design.json) +echo "System Design中的模組數: $sys_modules" + +# 檢查模組ID +echo "System Design中的模組ID:" +grep '"module_id":' docs/01_requirement/system_structure_design.json | sed 's/.*"module_id": "//g' | sed 's/".*//g' | sort + +echo "" + +# 檢查3: 介面數量統計 +echo "📊 3. 介面數量統計檢查" +echo "----------------------------------------" + +# 從requirements提取宣告的數量 +echo "Requirements.md中宣告的介面數量:" +grep -o "([A-Z]* - [0-9]*個介面)" docs/01_requirement/requirements.md + +# 實際UI數量 +actual_ui_count=$(grep -c '"view_id":' docs/01_requirement/system_structure_design.json) +echo "System Design中實際UI數量: $actual_ui_count" + +# 計算宣告的總數 +declared_total=$(grep -o "([A-Z]* - [0-9]*個介面)" docs/01_requirement/requirements.md | grep -o "[0-9]*" | awk '{sum+=$1} END {print sum}') +echo "Requirements.md宣告的總數: $declared_total" + +if [ "$actual_ui_count" -eq "$declared_total" ]; then + echo "✅ UI數量一致" +else + echo "❌ UI數量不一致,差異: $((actual_ui_count - declared_total))" +fi + +echo "" + +# 檢查4: 功能特性對照 +echo "⚙️ 4. 功能特性對照檢查" +echo "----------------------------------------" + +# 檢查features數量 +feature_count=$(grep -c '"feature_name":' docs/01_requirement/system_structure_design.json) +echo "System Design中的功能特性數量: $feature_count" + +# 檢查每個模組的功能分布 +echo "各模組功能分布:" +grep -A 2 '"module_id":' docs/01_requirement/system_structure_design.json | grep -o '"MD_[^"]*"' | sort | uniq -c + +echo "" + +# 檢查5: 資料庫一致性檢查 +echo "🗄️ 5. 資料庫架構一致性檢查" +echo "----------------------------------------" + +if [ -f "docs/04_technical/database-schema.md" ]; then + # 檢查data_binding與資料表的對應 + echo "System Design中的data_binding:" + grep -A 5 '"data_binding":' docs/01_requirement/system_structure_design.json | grep '"[A-Z]' | sed 's/.*"//g' | sed 's/".*//g' | sort | uniq + + echo "Database Schema中的資料表:" + grep -o "CREATE TABLE [a-zA-Z_]*" docs/04_technical/database-schema.md | sed 's/CREATE TABLE //g' | sort +else + echo "⚠️ database-schema.md 檔案不存在" +fi + +echo "" + +# 檢查6: API端點一致性 +echo "🔗 6. API端點一致性檢查" +echo "----------------------------------------" + +if [ -f "docs/04_technical/api-specifications.md" ]; then + # 檢查API端點數量 + api_count=$(grep -c "### " docs/04_technical/api-specifications.md) + echo "API規格中的端點數量: $api_count" + + # 檢查API模組分布 + echo "API端點分布:" + grep "### " docs/04_technical/api-specifications.md | head -10 +else + echo "⚠️ api-specifications.md 檔案不存在" +fi + +echo "" + +# 檢查7: 技術選型一致性 +echo "💻 7. 技術選型一致性檢查" +echo "----------------------------------------" + +if [ -f "docs/04_technical/tech-stack-decision.md" ]; then + echo "Tech Stack Decision中提到的主要技術:" + grep -o "Flutter\|PostgreSQL\|\.NET\|GPT-4\|Docker" docs/04_technical/tech-stack-decision.md | sort | uniq -c +else + echo "⚠️ tech-stack-decision.md 檔案不存在" +fi + +echo "" + +# 生成總結報告 +echo "📋 一致性檢查總結報告" +echo "==================================================" + +# 計算一致性分數 +total_checks=7 +passed_checks=0 + +# UI名稱一致性評分 +ui_diff=$(comm -3 /tmp/dramaling_check/system_uis.txt /tmp/dramaling_check/flow_uis.txt | wc -l) +if [ "$ui_diff" -lt 10 ]; then + echo "✅ UI名稱一致性: 良好 (差異少於10個)" + ((passed_checks++)) +else + echo "⚠️ UI名稱一致性: 需要改進 (差異$ui_diff個)" +fi + +# 模組架構一致性評分 +if [ "$req_modules" -eq "$sys_modules" ]; then + echo "✅ 模組架構一致性: 優秀" + ((passed_checks++)) +else + echo "❌ 模組架構一致性: 不一致" +fi + +# 介面數量一致性評分 +if [ "$actual_ui_count" -eq "$declared_total" ] 2>/dev/null; then + echo "✅ 介面數量一致性: 完美匹配" + ((passed_checks++)) +else + echo "⚠️ 介面數量一致性: 有差異" +fi + +# 功能特性一致性評分(假設合理) +if [ "$feature_count" -gt 15 ]; then + echo "✅ 功能特性定義: 豐富完整" + ((passed_checks++)) +else + echo "⚠️ 功能特性定義: 可能不足" +fi + +# 其他檢查項目的簡化評分 +echo "✅ 資料庫架構檢查: 已執行" +((passed_checks++)) +echo "✅ API端點檢查: 已執行" +((passed_checks++)) +echo "✅ 技術選型檢查: 已執行" +((passed_checks++)) + +# 計算總分 +score=$(echo "scale=1; $passed_checks * 10 / $total_checks" | bc -l) +echo "" +echo "🏆 總體一致性評分: $score/10" + +if (( $(echo "$score >= 8" | bc -l) )); then + echo "🎉 評級: 優秀 - 可以開始開發!" +elif (( $(echo "$score >= 6" | bc -l) )); then + echo "👍 評級: 良好 - 建議修正部分問題後開發" +else + echo "⚠️ 評級: 需要改進 - 建議先解決一致性問題" +fi + +echo "" +echo "📝 建議執行以下操作:" +echo "1. 檢查並統一UI命名" +echo "2. 確認模組架構定義" +echo "3. 驗證介面數量統計" +echo "4. 完善功能特性描述" +echo "5. 定期執行此檢查工具" + +# 清理臨時文件 +rm -rf /tmp/dramaling_check + +echo "" +echo "✅ 檢查完成!詳細報告已生成。" \ No newline at end of file diff --git a/scripts/maintenance/check_doc_quality.sh b/scripts/maintenance/check_doc_quality.sh new file mode 100644 index 0000000..9dd6b63 --- /dev/null +++ b/scripts/maintenance/check_doc_quality.sh @@ -0,0 +1,131 @@ +#!/bin/bash + +# 文檔品質檢查腳本 +echo "🔍 文檔品質檢查開始..." +echo "=====================================" + +# 檢查文檔完整性 +echo "📄 1. 文檔完整性檢查" +echo "-------------------------------------" + +# 必要文檔清單 +required_docs=( + "docs/01_requirement/requirements.md" + "docs/01_requirement/system_structure_design.json" + "docs/04_technical/user-flow-specification.md" + "docs/04_technical/tech-stack-decision.md" + "docs/04_technical/api-specifications.md" + "docs/04_technical/database-schema.md" + "docs/02_design/ui-ux-guidelines.md" + "docs/02_design/business-logic-rules.md" +) + +missing_docs=0 +for doc in "${required_docs[@]}"; do + if [ -f "$doc" ]; then + echo "✅ $doc" + else + echo "❌ $doc (缺失)" + missing_docs=$((missing_docs + 1)) + fi +done + +echo "文檔完整性: $((${#required_docs[@]} - missing_docs))/${#required_docs[@]}" +echo "" + +# 檢查文檔大小和內容 +echo "📏 2. 文檔內容品質檢查" +echo "-------------------------------------" + +for doc in "${required_docs[@]}"; do + if [ -f "$doc" ]; then + size=$(wc -c < "$doc") + lines=$(wc -l < "$doc") + words=$(wc -w < "$doc") + + if [ $size -lt 1000 ]; then + echo "⚠️ $doc: 內容過少 (${size} bytes, ${lines} lines)" + elif [ $size -gt 100000 ]; then + echo "⚠️ $doc: 內容過多 (${size} bytes, ${lines} lines)" + else + echo "✅ $doc: 內容適中 (${words} words, ${lines} lines)" + fi + fi +done +echo "" + +# 檢查Markdown格式 +echo "📝 3. Markdown格式檢查" +echo "-------------------------------------" + +find docs/ -name "*.md" -type f | while read -r file; do + # 檢查標題結構 + h1_count=$(grep -c "^# " "$file" 2>/dev/null || echo 0) + h2_count=$(grep -c "^## " "$file" 2>/dev/null || echo 0) + + if [ "$h1_count" -eq 0 ]; then + echo "⚠️ $file: 缺少主標題 (H1)" + elif [ "$h1_count" -gt 1 ]; then + echo "⚠️ $file: 多個主標題 ($h1_count 個H1)" + else + echo "✅ $file: 標題結構良好" + fi +done +echo "" + +# 檢查TODO和FIXME +echo "📋 4. TODO和FIXME檢查" +echo "-------------------------------------" + +todo_count=0 +fixme_count=0 + +find docs/ -name "*.md" -type f | while read -r file; do + todos=$(grep -in "TODO\|FIXME" "$file" 2>/dev/null || true) + if [ -n "$todos" ]; then + echo "📌 $file:" + echo "$todos" | head -5 + echo "" + fi +done +echo "" + +# 檢查連結有效性 +echo "🔗 5. 內部連結檢查" +echo "-------------------------------------" + +find docs/ -name "*.md" -type f | while read -r file; do + # 檢查內部連結 [text](path) + grep -o '\[.*\](docs/[^)]*\|[^)]*\.md)' "$file" 2>/dev/null | while read -r link; do + # 提取路徑 + path=$(echo "$link" | sed 's/.*(\([^)]*\)).*/\1/') + if [[ "$path" == docs/* ]] || [[ "$path" == *.md ]]; then + if [ ! -f "$path" ]; then + echo "❌ $file: 無效連結 -> $path" + fi + fi + done +done +echo "" + +# 生成總結 +echo "📊 文檔品質總結" +echo "=====================================" + +total_docs=${#required_docs[@]} +existing_docs=$((total_docs - missing_docs)) +completeness=$((existing_docs * 100 / total_docs)) + +echo "文檔完整度: $completeness% ($existing_docs/$total_docs)" + +if [ $completeness -ge 90 ]; then + echo "✅ 品質評級: 優秀" +elif [ $completeness -ge 80 ]; then + echo "✅ 品質評級: 良好" +elif [ $completeness -ge 70 ]; then + echo "⚠️ 品質評級: 尚可" +else + echo "❌ 品質評級: 需要改進" +fi + +echo "檢查完成時間: $(date)" \ No newline at end of file diff --git a/scripts/maintenance/check_issues.sh b/scripts/maintenance/check_issues.sh new file mode 100755 index 0000000..2d67af6 --- /dev/null +++ b/scripts/maintenance/check_issues.sh @@ -0,0 +1,207 @@ +#!/bin/bash + +# Drama Ling 問題檢查工具 +# 用途:檢查和統計問題狀態 + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")" +ISSUES_FILE="$PROJECT_ROOT/docs/04_technical/issues-tracking.md" + +# 顏色定義 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +PURPLE='\033[0;35m' +NC='\033[0m' + +echo -e "${BLUE}🔍 Drama Ling 問題追蹤檢查${NC}" +echo "==============================================" + +if [ ! -f "$ISSUES_FILE" ]; then + echo -e "${RED}❌ 問題追蹤檔案不存在: $ISSUES_FILE${NC}" + exit 1 +fi + +# 檢查1: 問題總數統計 +echo -e "${PURPLE}📊 1. 問題總數統計${NC}" +echo "----------------------------------------" + +total_issues=$(grep -c "^## Issue #" "$ISSUES_FILE") +echo "總問題數量: $total_issues" + +if [ $total_issues -eq 0 ]; then + echo -e "${GREEN}🎉 沒有問題記錄${NC}" + exit 0 +fi + +# 依優先級統計 +critical_count=$(grep -c "🔴 Critical" "$ISSUES_FILE") +important_count=$(grep -c "🟡 Important" "$ISSUES_FILE") +normal_count=$(grep -c "🔵 Normal" "$ISSUES_FILE") +low_count=$(grep -c "🟢 Low" "$ISSUES_FILE") + +echo "🔴 Critical: $critical_count" +echo "🟡 Important: $important_count" +echo "🔵 Normal: $normal_count" +echo "🟢 Low: $low_count" + +echo "" + +# 檢查2: 狀態統計 +echo -e "${PURPLE}📋 2. 問題狀態統計${NC}" +echo "----------------------------------------" + +open_count=$(grep -c "status:open" "$ISSUES_FILE") +progress_count=$(grep -c "status:in-progress" "$ISSUES_FILE") +resolved_count=$(grep -c "status:resolved" "$ISSUES_FILE") +closed_count=$(grep -c "status:closed" "$ISSUES_FILE") +blocked_count=$(grep -c "status:blocked" "$ISSUES_FILE") + +echo "📂 Open: $open_count" +echo "⚡ In Progress: $progress_count" +echo "✅ Resolved: $resolved_count" +echo "🔒 Closed: $closed_count" +echo "🚫 Blocked: $blocked_count" + +echo "" + +# 檢查3: 模組分布 +echo -e "${PURPLE}🏗️ 3. 問題模組分布${NC}" +echo "----------------------------------------" + +api_count=$(grep -c "module:api" "$ISSUES_FILE") +auth_count=$(grep -c "module:auth" "$ISSUES_FILE") +ui_count=$(grep -c "module:ui" "$ISSUES_FILE") +db_count=$(grep -c "module:db" "$ISSUES_FILE") +docs_count=$(grep -c "module:docs" "$ISSUES_FILE") +learning_count=$(grep -c "module:learning" "$ISSUES_FILE") + +echo "🔗 API: $api_count" +echo "🔐 Auth: $auth_count" +echo "🎨 UI: $ui_count" +echo "🗄️ Database: $db_count" +echo "📚 Docs: $docs_count" +echo "📖 Learning: $learning_count" + +echo "" + +# 檢查4: 緊急問題列表 +if [ $critical_count -gt 0 ] || [ $blocked_count -gt 0 ]; then + echo -e "${RED}🚨 4. 緊急問題列表${NC}" + echo "----------------------------------------" + + if [ $critical_count -gt 0 ]; then + echo -e "${RED}Critical 問題:${NC}" + grep -A 1 "^## Issue #.*" "$ISSUES_FILE" | grep -B 1 "🔴 Critical" | grep "^## Issue #" | head -5 + fi + + if [ $blocked_count -gt 0 ]; then + echo -e "${RED}被阻擋的問題:${NC}" + grep -A 5 "^## Issue #.*" "$ISSUES_FILE" | grep -B 1 -A 3 "status:blocked" | grep "^## Issue #" | head -5 + fi + + echo "" +fi + +# 檢查5: 逾期問題 (簡化版) +echo -e "${PURPLE}⏰ 5. 待辦問題檢查${NC}" +echo "----------------------------------------" + +open_issues=$(grep -A 5 "^## Issue #.*" "$ISSUES_FILE" | grep -B 1 -A 3 "status:open" | grep "^## Issue #") +if [ -n "$open_issues" ]; then + echo "未解決的問題:" + echo "$open_issues" | head -5 + + if [ $(echo "$open_issues" | wc -l) -gt 5 ]; then + echo "... 還有 $(($(echo "$open_issues" | wc -l) - 5)) 個問題" + fi +else + echo -e "${GREEN}✅ 沒有待辦問題${NC}" +fi + +echo "" + +# 檢查6: 問題類型分析 +echo -e "${PURPLE}🏷️ 6. 問題類型分析${NC}" +echo "----------------------------------------" + +spec_count=$(grep -c "type:spec" "$ISSUES_FILE") +conflict_count=$(grep -c "type:conflict" "$ISSUES_FILE") +missing_count=$(grep -c "type:missing" "$ISSUES_FILE") +decision_count=$(grep -c "type:decision" "$ISSUES_FILE") +bug_count=$(grep -c "type:bug" "$ISSUES_FILE") + +echo "📋 Spec: $spec_count" +echo "⚡ Conflict: $conflict_count" +echo "❓ Missing: $missing_count" +echo "🤔 Decision: $decision_count" +echo "🐛 Bug: $bug_count" + +echo "" + +# 生成健康度報告 +echo -e "${BLUE}📈 7. 專案健康度評估${NC}" +echo "----------------------------------------" + +# 計算健康度分數 +health_score=100 + +# 扣分邏輯 +if [ $critical_count -gt 0 ]; then + health_score=$((health_score - critical_count * 20)) +fi + +if [ $blocked_count -gt 0 ]; then + health_score=$((health_score - blocked_count * 15)) +fi + +if [ $open_count -gt 10 ]; then + health_score=$((health_score - (open_count - 10) * 2)) +fi + +# 確保分數不為負數 +if [ $health_score -lt 0 ]; then + health_score=0 +fi + +echo "專案健康度分數: $health_score/100" + +if [ $health_score -ge 80 ]; then + echo -e "${GREEN}🎉 狀態: 優秀${NC}" +elif [ $health_score -ge 60 ]; then + echo -e "${YELLOW}👍 狀態: 良好${NC}" +elif [ $health_score -ge 40 ]; then + echo -e "${YELLOW}⚠️ 狀態: 需要關注${NC}" +else + echo -e "${RED}🚨 狀態: 需要緊急處理${NC}" +fi + +echo "" + +# 提供改進建議 +echo -e "${BLUE}💡 改進建議${NC}" +echo "----------------------------------------" + +if [ $critical_count -gt 0 ]; then + echo "• 優先解決 $critical_count 個 Critical 問題" +fi + +if [ $blocked_count -gt 0 ]; then + echo "• 移除 $blocked_count 個被阻擋的問題" +fi + +if [ $open_count -gt 10 ]; then + echo "• 處理過多的待辦問題 (建議控制在10個以內)" +fi + +if [ $spec_count -gt 5 ]; then + echo "• 規格問題較多,建議進行規格澄清會議" +fi + +if [ $conflict_count -gt 0 ]; then + echo "• 解決 $conflict_count 個衝突問題以避免開發延誤" +fi + +echo "" +echo -e "${GREEN}✅ 問題檢查完成${NC}" \ No newline at end of file diff --git a/scripts/maintenance/check_security.sh b/scripts/maintenance/check_security.sh new file mode 100644 index 0000000..1646e66 --- /dev/null +++ b/scripts/maintenance/check_security.sh @@ -0,0 +1,256 @@ +#!/bin/bash + +# 安全性檢查腳本 +echo "🔒 專案安全性檢查開始..." +echo "=====================================" + +# 檢查敏感資訊洩露 +echo "🕵️ 1. 敏感資訊洩露檢查" +echo "-------------------------------------" + +# 定義敏感關鍵詞 +sensitive_patterns=( + "password" + "api[_-]?key" + "secret" + "token" + "private[_-]?key" + "access[_-]?key" + "client[_-]?secret" + "database[_-]?url" + "connection[_-]?string" +) + +found_issues=0 + +for pattern in "${sensitive_patterns[@]}"; do + echo "檢查模式: $pattern" + matches=$(find . -name "*.md" -o -name "*.json" -o -name "*.sh" | xargs grep -il "$pattern" 2>/dev/null | grep -v ".git" | head -5) + if [ -n "$matches" ]; then + echo "⚠️ 發現可能的敏感資訊:" + echo "$matches" | while read -r file; do + echo " $file" + grep -in "$pattern" "$file" | head -2 | sed 's/^/ /' + done + found_issues=$((found_issues + 1)) + else + echo "✅ 未發現 $pattern 相關資訊" + fi + echo "" +done + +# 檢查硬編碼配置 +echo "⚙️ 2. 硬編碼配置檢查" +echo "-------------------------------------" + +config_patterns=( + "localhost" + "127\.0\.0\.1" + "192\.168\." + "\.env" + "config\.json" + "development" + "staging" + "production" +) + +for pattern in "${config_patterns[@]}"; do + matches=$(find docs/ -name "*.md" -o -name "*.json" | xargs grep -l "$pattern" 2>/dev/null) + if [ -n "$matches" ]; then + echo "📍 發現配置相關資訊 ($pattern):" + echo "$matches" | sed 's/^/ /' + fi +done +echo "" + +# 檢查權限和存取控制 +echo "🛡️ 3. 權限設計檢查" +echo "-------------------------------------" + +# 檢查是否有權限相關文檔 +permission_files=( + "docs/04_technical/api-specifications.md" + "docs/02_design/business-logic-rules.md" + "docs/01_requirement/system_structure_design.json" +) + +for file in "${permission_files[@]}"; do + if [ -f "$file" ]; then + # 檢查權限相關關鍵詞 + auth_keywords=$(grep -ic "auth\|permission\|role\|access\|jwt\|token" "$file" 2>/dev/null || echo 0) + if [ "$auth_keywords" -gt 0 ]; then + echo "✅ $file: 包含 $auth_keywords 個權限相關設計" + else + echo "⚠️ $file: 缺少權限設計說明" + fi + else + echo "❌ $file: 檔案不存在" + fi +done +echo "" + +# 檢查資料加密設計 +echo "🔐 4. 資料加密設計檢查" +echo "-------------------------------------" + +encryption_keywords=( + "encrypt" + "decrypt" + "hash" + "bcrypt" + "ssl" + "tls" + "https" +) + +total_encryption_refs=0 +for keyword in "${encryption_keywords[@]}"; do + refs=$(find docs/ -name "*.md" | xargs grep -ic "$keyword" 2>/dev/null | awk '{sum+=$1} END {print sum+0}') + total_encryption_refs=$((total_encryption_refs + refs)) +done + +if [ "$total_encryption_refs" -gt 0 ]; then + echo "✅ 發現 $total_encryption_refs 個加密相關設計" +else + echo "⚠️ 缺少資料加密設計說明" +fi +echo "" + +# 檢查第三方整合安全性 +echo "🔌 5. 第三方整合安全性檢查" +echo "-------------------------------------" + +if [ -f "docs/04_technical/third-party-integration-specification.md" ]; then + # 檢查第三方服務的安全考量 + security_mentions=$(grep -ic "security\|secure\|auth\|key\|token\|ssl" "docs/04_technical/third-party-integration-specification.md" 2>/dev/null || echo 0) + + if [ "$security_mentions" -gt 5 ]; then + echo "✅ 第三方整合包含充足的安全考量 ($security_mentions 處)" + elif [ "$security_mentions" -gt 0 ]; then + echo "⚠️ 第三方整合安全考量不足 ($security_mentions 處)" + else + echo "❌ 第三方整合缺少安全考量" + fi +else + echo "❌ 第三方整合規格文檔不存在" +fi +echo "" + +# 檢查檔案權限 +echo "📂 6. 檔案權限檢查" +echo "-------------------------------------" + +# 檢查腳本檔案權限 +find . -name "*.sh" -type f | while read -r script; do + if [ -x "$script" ]; then + echo "✅ $script: 具有執行權限" + else + echo "⚠️ $script: 缺少執行權限" + fi +done + +# 檢查是否有過於寬鬆的權限 +find . -type f -perm 777 2>/dev/null | while read -r file; do + echo "❌ $file: 權限過於寬鬆 (777)" +done +echo "" + +# 檢查Git忽略設定 +echo "📋 7. Git安全設定檢查" +echo "-------------------------------------" + +if [ -f ".gitignore" ]; then + # 檢查是否忽略了敏感檔案 + sensitive_extensions=( + "\.env" + "\.key" + "\.pem" + "config\.json" + "secrets" + "\.log" + ) + + gitignore_score=0 + for ext in "${sensitive_extensions[@]}"; do + if grep -q "$ext" .gitignore 2>/dev/null; then + echo "✅ .gitignore 包含 $ext" + gitignore_score=$((gitignore_score + 1)) + else + echo "⚠️ .gitignore 缺少 $ext" + fi + done + + echo "Git安全設定評分: $gitignore_score/${#sensitive_extensions[@]}" +else + echo "❌ .gitignore 檔案不存在" +fi +echo "" + +# 生成安全性總結報告 +echo "📊 安全性檢查總結" +echo "=====================================" + +# 計算安全性分數 +security_score=0 +max_score=7 + +# 評分邏輯 +if [ $found_issues -eq 0 ]; then + security_score=$((security_score + 2)) + echo "✅ 敏感資訊檢查: 通過 (+2分)" +else + echo "❌ 敏感資訊檢查: 發現 $found_issues 個問題" +fi + +if [ "$total_encryption_refs" -gt 0 ]; then + security_score=$((security_score + 1)) + echo "✅ 加密設計: 通過 (+1分)" +else + echo "❌ 加密設計: 不足" +fi + +if [ -f "docs/04_technical/third-party-integration-specification.md" ] && [ "$security_mentions" -gt 5 ]; then + security_score=$((security_score + 1)) + echo "✅ 第三方整合安全: 通過 (+1分)" +else + echo "❌ 第三方整合安全: 不足" +fi + +if [ -f ".gitignore" ] && [ "$gitignore_score" -gt 3 ]; then + security_score=$((security_score + 1)) + echo "✅ Git安全設定: 通過 (+1分)" +else + echo "❌ Git安全設定: 不足" +fi + +# 其他檢查項目簡化評分 +security_score=$((security_score + 2)) # 權限檢查和配置檢查的基礎分數 + +final_score=$(echo "scale=1; $security_score * 10 / $max_score" | bc -l 2>/dev/null || echo "0") + +echo "" +echo "🏆 總體安全性評分: $final_score/10" + +if (( $(echo "$final_score >= 8" | bc -l 2>/dev/null || echo 0) )); then + echo "🎉 安全性評級: 優秀" +elif (( $(echo "$final_score >= 6" | bc -l 2>/dev/null || echo 0) )); then + echo "👍 安全性評級: 良好" +elif (( $(echo "$final_score >= 4" | bc -l 2>/dev/null || echo 0) )); then + echo "⚠️ 安全性評級: 尚可" +else + echo "❌ 安全性評級: 需要改進" +fi + +echo "" +echo "建議改進項目:" +if [ $found_issues -gt 0 ]; then + echo "- 移除或保護敏感資訊" +fi +if [ "$total_encryption_refs" -eq 0 ]; then + echo "- 補充資料加密設計" +fi +if [ ! -f ".gitignore" ] || [ "$gitignore_score" -le 3 ]; then + echo "- 完善Git安全設定" +fi + +echo "檢查完成時間: $(date)" \ No newline at end of file diff --git a/scripts/maintenance/create_issue.sh b/scripts/maintenance/create_issue.sh new file mode 100755 index 0000000..0d7f634 --- /dev/null +++ b/scripts/maintenance/create_issue.sh @@ -0,0 +1,176 @@ +#!/bin/bash + +# Drama Ling 問題建立工具 +# 用途:快速建立和記錄問題 +# 使用方法: ./create_issue.sh "問題標題" [優先級] [模組] + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")" +ISSUES_FILE="$PROJECT_ROOT/docs/04_technical/issues-tracking.md" + +# 顏色定義 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +# 顯示使用說明 +show_help() { + echo -e "${BLUE}問題建立工具使用說明:${NC}" + echo "使用方法: $0 \"問題標題\" [優先級] [模組]" + echo "" + echo -e "${BLUE}優先級:${NC}" + echo " critical - 🔴 Critical (嚴重)" + echo " important - 🟡 Important (重要)" + echo " normal - 🔵 Normal (一般)" + echo " low - 🟢 Low (輕微)" + echo "" + echo -e "${BLUE}模組:${NC}" + echo " auth - 認證系統" + echo " learning - 學習內容" + echo " ui - 使用者介面" + echo " api - API 規格" + echo " db - 資料庫" + echo " docs - 文檔" + echo "" + echo -e "${BLUE}範例:${NC}" + echo " $0 \"API endpoint naming conflict\" critical api" + echo " $0 \"UI component specification unclear\" important ui" +} + +# 獲取下一個問題編號 +get_next_issue_number() { + if [ ! -f "$ISSUES_FILE" ]; then + echo "001" + return + fi + + # 從問題追蹤檔案中找到最大的問題編號 + local max_num=$(grep -o "Issue #[0-9]*" "$ISSUES_FILE" | grep -o "[0-9]*" | sort -n | tail -1) + + if [ -z "$max_num" ]; then + echo "001" + else + printf "%03d" $((10#$max_num + 1)) + fi +} + +# 轉換優先級格式 +format_priority() { + case $1 in + critical|1) echo "🔴 Critical" ;; + important|2) echo "🟡 Important" ;; + normal|3) echo "🔵 Normal" ;; + low|4) echo "🟢 Low" ;; + *) echo "🔵 Normal" ;; + esac +} + +# 轉換模組格式 +format_module() { + case $1 in + auth) echo "認證系統" ;; + learning) echo "學習內容" ;; + ui) echo "使用者介面" ;; + api) echo "API 規格" ;; + db) echo "資料庫" ;; + docs) echo "文檔" ;; + *) echo "一般" ;; + esac +} + +# 建立問題 +create_issue() { + local title="$1" + local priority="$2" + local module="$3" + + if [ -z "$title" ]; then + echo -e "${RED}❌ 錯誤: 請提供問題標題${NC}" + show_help + exit 1 + fi + + # 預設值 + priority=${priority:-"normal"} + module=${module:-"general"} + + local issue_number=$(get_next_issue_number) + local formatted_priority=$(format_priority "$priority") + local formatted_module=$(format_module "$module") + local current_date=$(date +"%Y-%m-%d") + + # 建立問題內容 + local issue_content=" + +--- + +## Issue #${issue_number} - ${title} + +**優先級**: ${formatted_priority} +**狀態**: Open +**標籤**: \`type:spec\` \`module:${module}\` \`status:open\` +**建立日期**: ${current_date} +**負責人**: [待指派] +**預計解決**: [待設定] + +### 問題描述 +[請詳細描述問題的內容、影響範圍和背景資訊] + +### 相關文件 +- 檔案: [檔案路徑:行號] + +### 可能解決方案 +1. 方案A: [待分析] + - 優點: [待列出] + - 缺點: [待列出] + +### 決議 +[待決定] + +### 執行紀錄 +- ${current_date}: 建立問題 + +" + + # 確保問題追蹤檔案存在 + if [ ! -f "$ISSUES_FILE" ]; then + echo -e "${YELLOW}⚠️ 問題追蹤檔案不存在,將建立新檔案${NC}" + touch "$ISSUES_FILE" + fi + + # 在問題追蹤看板區域之前添加新問題 + if grep -q "## 📊 問題追蹤看板" "$ISSUES_FILE"; then + # 找到看板區域,在其前面插入問題 + awk '/## 📊 問題追蹤看板/ { print "'"${issue_content}"'"; print; next } 1' "$ISSUES_FILE" > "${ISSUES_FILE}.tmp" && mv "${ISSUES_FILE}.tmp" "$ISSUES_FILE" + else + # 如果沒有看板區域,直接添加到檔案末尾 + echo "$issue_content" >> "$ISSUES_FILE" + fi + + echo -e "${GREEN}✅ 問題 #${issue_number} 建立成功!${NC}" + echo -e "標題: ${title}" + echo -e "優先級: ${formatted_priority}" + echo -e "模組: ${formatted_module}" + echo -e "檔案: ${ISSUES_FILE}" + + # 詢問是否要開啟編輯器 + read -p "是否要開啟編輯器完善問題描述? (y/N): " edit_choice + if [[ $edit_choice =~ ^[Yy]$ ]]; then + ${EDITOR:-nano} "$ISSUES_FILE" + fi +} + +# 主程式 +main() { + if [ "$1" = "help" ] || [ "$1" = "--help" ] || [ "$1" = "-h" ]; then + show_help + exit 0 + fi + + create_issue "$1" "$2" "$3" +} + +# 執行主程式 +main "$@" \ No newline at end of file diff --git a/scripts/maintenance_manager.sh b/scripts/maintenance_manager.sh new file mode 100755 index 0000000..cccb88c --- /dev/null +++ b/scripts/maintenance_manager.sh @@ -0,0 +1,328 @@ +#!/bin/bash + +# Drama Ling 專案例行作業管理器 +# 用途:統一管理和執行各種例行檢查和維護作業 +# 作者:Claude Code Assistant +# 版本:1.0 + +# 設定 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" +REPORTS_DIR="$SCRIPT_DIR/reports" +LOGS_DIR="$SCRIPT_DIR/logs" +CONFIG_DIR="$SCRIPT_DIR/config" + +# 確保目錄存在 +mkdir -p "$REPORTS_DIR" "$LOGS_DIR" + +# 顏色定義 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +PURPLE='\033[0;35m' +CYAN='\033[0;36m' +NC='\033[0m' # No Color + +# 時間戳 +TIMESTAMP=$(date +"%Y%m%d_%H%M%S") +DATE_SIMPLE=$(date +"%Y-%m-%d") + +# 顯示標題 +show_header() { + echo -e "${CYAN}=================================================${NC}" + echo -e "${CYAN} Drama Ling 專案例行作業管理器${NC}" + echo -e "${CYAN} 執行時間: $(date)${NC}" + echo -e "${CYAN}=================================================${NC}" + echo "" +} + +# 顯示使用說明 +show_help() { + echo -e "${BLUE}使用方法:${NC}" + echo " $0 [選項]" + echo "" + echo -e "${BLUE}選項:${NC}" + echo " all 執行所有例行作業" + echo " consistency 執行文檔一致性檢查" + echo " quality 執行文檔品質檢查" + echo " security 執行安全性檢查" + echo " dependencies 執行相依性檢查" + echo " structure 執行專案結構檢查" + echo " issues 檢查問題追蹤狀態" + echo " report 生成綜合報告" + echo " schedule 設置定期執行排程" + echo " history 查看執行歷史" + echo " clean 清理舊的報告和日誌" + echo " help 顯示此幫助訊息" + echo "" + echo -e "${BLUE}範例:${NC}" + echo " $0 all # 執行所有檢查" + echo " $0 consistency quality # 只執行指定的檢查" + echo " $0 report # 只生成報告" +} + +# 記錄日誌 +log_message() { + local level=$1 + local message=$2 + echo "[$(date +'%Y-%m-%d %H:%M:%S')] [$level] $message" >> "$LOGS_DIR/maintenance_${DATE_SIMPLE}.log" +} + +# 執行檢查並記錄結果 +run_check() { + local check_name=$1 + local script_path=$2 + local description=$3 + + echo -e "${YELLOW}📋 執行: $description${NC}" + log_message "INFO" "開始執行: $check_name" + + if [ -f "$script_path" ]; then + # 執行檢查並捕獲輸出 + local output_file="$REPORTS_DIR/${check_name}_${TIMESTAMP}.txt" + local start_time=$(date +%s) + + if bash "$script_path" > "$output_file" 2>&1; then + local end_time=$(date +%s) + local duration=$((end_time - start_time)) + echo -e "${GREEN}✅ 完成: $description (耗時: ${duration}s)${NC}" + log_message "SUCCESS" "$check_name 執行成功,耗時: ${duration}s" + return 0 + else + echo -e "${RED}❌ 失敗: $description${NC}" + log_message "ERROR" "$check_name 執行失敗" + return 1 + fi + else + echo -e "${RED}❌ 腳本不存在: $script_path${NC}" + log_message "ERROR" "腳本不存在: $script_path" + return 1 + fi +} + +# 執行文檔一致性檢查 +check_consistency() { + echo -e "${PURPLE}🔍 === 文檔一致性檢查 ===${NC}" + run_check "consistency" "$SCRIPT_DIR/maintenance/check_consistency.sh" "文檔一致性檢查" +} + +# 執行文檔品質檢查 +check_quality() { + echo -e "${PURPLE}📚 === 文檔品質檢查 ===${NC}" + run_check "quality" "$SCRIPT_DIR/maintenance/check_doc_quality.sh" "文檔品質檢查" +} + +# 執行安全性檢查 +check_security() { + echo -e "${PURPLE}🔒 === 安全性檢查 ===${NC}" + run_check "security" "$SCRIPT_DIR/maintenance/check_security.sh" "安全性檢查" +} + +# 執行相依性檢查 +check_dependencies() { + echo -e "${PURPLE}📦 === 相依性檢查 ===${NC}" + run_check "dependencies" "$SCRIPT_DIR/maintenance/check_dependencies.sh" "相依性檢查" +} + +# 執行專案結構檢查 +check_structure() { + echo -e "${PURPLE}🏗️ === 專案結構檢查 ===${NC}" + run_check "structure" "$SCRIPT_DIR/maintenance/check_project_structure.sh" "專案結構檢查" +} + +# 執行問題追蹤檢查 +check_issues() { + echo -e "${PURPLE}🔍 === 問題追蹤檢查 ===${NC}" + run_check "issues" "$SCRIPT_DIR/maintenance/check_issues.sh" "問題追蹤檢查" +} + +# 生成綜合報告 +generate_report() { + echo -e "${PURPLE}📊 === 生成綜合報告 ===${NC}" + local report_file="$REPORTS_DIR/comprehensive_report_${TIMESTAMP}.html" + + # 這裡會呼叫報告生成腳本 + if [ -f "$SCRIPT_DIR/maintenance/generate_report.sh" ]; then + bash "$SCRIPT_DIR/maintenance/generate_report.sh" "$REPORTS_DIR" "$report_file" + echo -e "${GREEN}✅ 綜合報告已生成: $report_file${NC}" + else + echo -e "${YELLOW}⚠️ 報告生成腳本不存在,跳過${NC}" + fi +} + +# 設置定期執行排程 +setup_schedule() { + echo -e "${PURPLE}⏰ === 設置定期執行排程 ===${NC}" + echo "選擇排程頻率:" + echo "1) 每日執行 (09:00)" + echo "2) 每週執行 (週一 09:00)" + echo "3) 每月執行 (1號 09:00)" + echo "4) 自定義" + echo "5) 移除現有排程" + + read -p "請選擇 (1-5): " choice + + case $choice in + 1) + (crontab -l 2>/dev/null; echo "0 9 * * * cd $PROJECT_ROOT && $SCRIPT_DIR/maintenance_manager.sh all") | crontab - + echo -e "${GREEN}✅ 已設置每日執行排程${NC}" + ;; + 2) + (crontab -l 2>/dev/null; echo "0 9 * * 1 cd $PROJECT_ROOT && $SCRIPT_DIR/maintenance_manager.sh all") | crontab - + echo -e "${GREEN}✅ 已設置每週執行排程${NC}" + ;; + 3) + (crontab -l 2>/dev/null; echo "0 9 1 * * cd $PROJECT_ROOT && $SCRIPT_DIR/maintenance_manager.sh all") | crontab - + echo -e "${GREEN}✅ 已設置每月執行排程${NC}" + ;; + 4) + echo "請參考 crontab 格式設置自定義排程" + echo "範例: 0 9 * * 1-5 表示工作日上午9點執行" + ;; + 5) + crontab -l 2>/dev/null | grep -v "maintenance_manager.sh" | crontab - + echo -e "${GREEN}✅ 已移除相關排程${NC}" + ;; + *) + echo -e "${RED}❌ 無效選擇${NC}" + ;; + esac +} + +# 查看執行歷史 +show_history() { + echo -e "${PURPLE}📜 === 執行歷史 ===${NC}" + if [ -d "$LOGS_DIR" ] && [ "$(ls -A $LOGS_DIR)" ]; then + echo "最近的日誌檔案:" + ls -lt "$LOGS_DIR"/*.log 2>/dev/null | head -5 + echo "" + echo "最新的執行記錄:" + tail -20 "$LOGS_DIR"/maintenance_*.log 2>/dev/null || echo "無執行記錄" + else + echo "無執行歷史記錄" + fi + + echo "" + echo "最近的報告:" + if [ -d "$REPORTS_DIR" ] && [ "$(ls -A $REPORTS_DIR)" ]; then + ls -lt "$REPORTS_DIR"/* 2>/dev/null | head -5 + else + echo "無報告記錄" + fi +} + +# 清理舊檔案 +clean_old_files() { + echo -e "${PURPLE}🧹 === 清理舊檔案 ===${NC}" + read -p "刪除幾天前的檔案? (預設: 30): " days + days=${days:-30} + + if [ "$days" -gt 0 ]; then + echo "刪除 $days 天前的日誌和報告..." + find "$LOGS_DIR" -name "*.log" -mtime +$days -delete 2>/dev/null + find "$REPORTS_DIR" -name "*" -mtime +$days -delete 2>/dev/null + echo -e "${GREEN}✅ 清理完成${NC}" + else + echo -e "${RED}❌ 無效的天數${NC}" + fi +} + +# 主要邏輯 +main() { + show_header + + if [ $# -eq 0 ]; then + show_help + exit 1 + fi + + # 記錄開始執行 + log_message "START" "開始執行例行作業: $*" + + local total_checks=0 + local successful_checks=0 + + # 處理參數 + while [ $# -gt 0 ]; do + case $1 in + all) + total_checks=$((total_checks + 6)) + check_consistency && successful_checks=$((successful_checks + 1)) + check_quality && successful_checks=$((successful_checks + 1)) + check_security && successful_checks=$((successful_checks + 1)) + check_dependencies && successful_checks=$((successful_checks + 1)) + check_structure && successful_checks=$((successful_checks + 1)) + check_issues && successful_checks=$((successful_checks + 1)) + generate_report + ;; + consistency) + total_checks=$((total_checks + 1)) + check_consistency && successful_checks=$((successful_checks + 1)) + ;; + quality) + total_checks=$((total_checks + 1)) + check_quality && successful_checks=$((successful_checks + 1)) + ;; + security) + total_checks=$((total_checks + 1)) + check_security && successful_checks=$((successful_checks + 1)) + ;; + dependencies) + total_checks=$((total_checks + 1)) + check_dependencies && successful_checks=$((successful_checks + 1)) + ;; + structure) + total_checks=$((total_checks + 1)) + check_structure && successful_checks=$((successful_checks + 1)) + ;; + issues) + total_checks=$((total_checks + 1)) + check_issues && successful_checks=$((successful_checks + 1)) + ;; + report) + generate_report + ;; + schedule) + setup_schedule + ;; + history) + show_history + ;; + clean) + clean_old_files + ;; + help) + show_help + ;; + *) + echo -e "${RED}❌ 未知選項: $1${NC}" + show_help + exit 1 + ;; + esac + shift + done + + # 顯示執行總結 + if [ $total_checks -gt 0 ]; then + echo "" + echo -e "${CYAN}=================================================${NC}" + echo -e "${CYAN}執行總結:${NC}" + echo -e "總檢查項目: $total_checks" + echo -e "成功執行: ${GREEN}$successful_checks${NC}" + echo -e "失敗項目: ${RED}$((total_checks - successful_checks))${NC}" + + if [ $successful_checks -eq $total_checks ]; then + echo -e "${GREEN}🎉 所有檢查都執行成功!${NC}" + log_message "SUCCESS" "所有例行作業執行成功" + else + echo -e "${YELLOW}⚠️ 部分檢查執行失敗,請查看詳細報告${NC}" + log_message "WARNING" "部分例行作業執行失敗" + fi + echo -e "${CYAN}=================================================${NC}" + fi +} + +# 執行主程式 +main "$@" \ No newline at end of file diff --git a/scripts/reports/issues_20250908_003117.txt b/scripts/reports/issues_20250908_003117.txt new file mode 100644 index 0000000..b45edde --- /dev/null +++ b/scripts/reports/issues_20250908_003117.txt @@ -0,0 +1,58 @@ +🔍 Drama Ling 問題追蹤檢查 +============================================== +📊 1. 問題總數統計 +---------------------------------------- +總問題數量: 3 +🔴 Critical: 3 +🟡 Important: 3 +🔵 Normal: 3 +🟢 Low: 2 + +📋 2. 問題狀態統計 +---------------------------------------- +📂 Open: 5 +⚡ In Progress: 1 +✅ Resolved: 1 +🔒 Closed: 1 +🚫 Blocked: 1 + +🏗️ 3. 問題模組分布 +---------------------------------------- +🔗 API: 4 +🔐 Auth: 1 +🎨 UI: 2 +🗄️ Database: 1 +📚 Docs: 1 +📖 Learning: 1 + +🚨 4. 緊急問題列表 +---------------------------------------- +Critical 問題: +被阻擋的問題: + +⏰ 5. 待辦問題檢查 +---------------------------------------- +未解決的問題: +## Issue #009 - API模組化文檔中有7個待建立的模組 +## Issue #010 - System Design與User Flow的UI名稱存在差異 + +🏷️ 6. 問題類型分析 +---------------------------------------- +📋 Spec: 3 +⚡ Conflict: 2 +❓ Missing: 1 +🤔 Decision: 1 +🐛 Bug: 1 + +📈 7. 專案健康度評估 +---------------------------------------- +專案健康度分數: 25/100 +🚨 狀態: 需要緊急處理 + +💡 改進建議 +---------------------------------------- +• 優先解決 3 個 Critical 問題 +• 移除 1 個被阻擋的問題 +• 解決 2 個衝突問題以避免開發延誤 + +✅ 問題檢查完成 diff --git a/tools/check_issues.sh b/tools/check_issues.sh new file mode 100755 index 0000000..469732c --- /dev/null +++ b/tools/check_issues.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# 簡單的問題狀態檢查 +ISSUE_FILE="ISSUES.md" + +if [ ! -f "$ISSUE_FILE" ]; then + echo "❌ 找不到 $ISSUE_FILE" + exit 1 +fi + +echo "🔍 問題狀態總覽" +echo "==================" + +urgent=$(grep -c "^- \[ \]" "$ISSUE_FILE" | head -1) +urgent_section=$(sed -n '/## 🔥 緊急問題/,/## /p' "$ISSUE_FILE" | grep -c "^- \[ \]") +important_section=$(sed -n '/## ⚠️ 重要問題/,/## /p' "$ISSUE_FILE" | grep -c "^- \[ \]") +normal_section=$(sed -n '/## 📝 一般問題/,/## /p' "$ISSUE_FILE" | grep -c "^- \[ \]") +resolved=$(grep -c "^- \[x\]" "$ISSUE_FILE") + +echo "🔥 緊急問題: $urgent_section 個" +echo "⚠️ 重要問題: $important_section 個" +echo "📝 一般問題: $normal_section 個" +echo "✅ 已解決: $resolved 個" + +total_open=$((urgent_section + important_section + normal_section)) +echo "" +echo "📊 總計: $total_open 個待處理問題" + +if [ $urgent_section -gt 0 ]; then + echo "" + echo "🚨 緊急問題列表:" + sed -n '/## 🔥 緊急問題/,/## /p' "$ISSUE_FILE" | grep "^- \[ \]" | head -3 +fi + +if [ $total_open -eq 0 ]; then + echo "🎉 沒有待處理問題!" +elif [ $urgent_section -gt 3 ]; then + echo "⚠️ 緊急問題過多,建議優先處理" +elif [ $total_open -gt 10 ]; then + echo "💡 問題較多,建議分類處理" +else + echo "👍 問題數量合理" +fi \ No newline at end of file diff --git a/tools/check_reports.sh b/tools/check_reports.sh new file mode 100755 index 0000000..9d0c4c7 --- /dev/null +++ b/tools/check_reports.sh @@ -0,0 +1,184 @@ +#!/bin/bash + +# Drama Ling 報告檢查工具 +# 用途:檢查報告狀態和統計 + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPORTS_DIR="$SCRIPT_DIR/reports" + +# 顏色定義 +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +RED='\033[0;31m' +PURPLE='\033[0;35m' +NC='\033[0m' + +echo -e "${BLUE}📊 Drama Ling 報告狀態檢查${NC}" +echo "==============================================" + +# 檢查報告目錄是否存在 +if [ ! -d "$REPORTS_DIR" ]; then + echo -e "${RED}❌ 報告目錄不存在: $REPORTS_DIR${NC}" + exit 1 +fi + +# 統計報告數量 +echo -e "${PURPLE}📈 1. 報告數量統計${NC}" +echo "----------------------------------------" + +analysis_count=$(find "$REPORTS_DIR/analysis" -name "*.md" 2>/dev/null | wc -l | tr -d ' ') +decisions_count=$(find "$REPORTS_DIR/decisions" -name "*.md" 2>/dev/null | wc -l | tr -d ' ') +archive_count=$(find "$REPORTS_DIR/archive" -name "*.md" 2>/dev/null | wc -l | tr -d ' ') + +echo "📊 分析報告: $analysis_count 份" +echo "📋 決策記錄: $decisions_count 份" +echo "📦 已歸檔: $archive_count 份" +echo "📄 總計: $((analysis_count + decisions_count + archive_count)) 份報告" + +echo "" + +# 最近的報告 +echo -e "${PURPLE}📅 2. 最近的報告${NC}" +echo "----------------------------------------" + +echo -e "${BLUE}分析報告:${NC}" +if [ $analysis_count -gt 0 ]; then + find "$REPORTS_DIR/analysis" -name "*.md" -exec basename {} \; 2>/dev/null | sort -r | head -5 +else + echo " 無分析報告" +fi + +echo "" +echo -e "${BLUE}決策記錄:${NC}" +if [ $decisions_count -gt 0 ]; then + find "$REPORTS_DIR/decisions" -name "*.md" -exec basename {} \; 2>/dev/null | sort -r | head -5 +else + echo " 無決策記錄" +fi + +echo "" + +# 與問題系統的整合狀態 +echo -e "${PURPLE}🔗 3. 問題系統整合狀態${NC}" +echo "----------------------------------------" + +if [ -f "$SCRIPT_DIR/ISSUES.md" ]; then + linked_reports=$(grep -c "📊.*報告.*\.md" "$SCRIPT_DIR/ISSUES.md") + echo "已連結到問題的報告: $linked_reports 份" + + # 檢查是否有報告未連結到問題系統 + total_reports=$((analysis_count + decisions_count)) + if [ $total_reports -gt $linked_reports ]; then + echo -e "${YELLOW}⚠️ 有 $((total_reports - linked_reports)) 份報告尚未連結到問題系統${NC}" + else + echo -e "${GREEN}✅ 所有報告都已連結到問題系統${NC}" + fi +else + echo -e "${RED}❌ 找不到 ISSUES.md 檔案${NC}" +fi + +echo "" + +# 報告命名規範檢查 +echo -e "${PURPLE}📝 4. 命名規範檢查${NC}" +echo "----------------------------------------" + +naming_issues=0 + +# 檢查分析報告命名 +if [ $analysis_count -gt 0 ]; then + echo "檢查分析報告命名規範..." + find "$REPORTS_DIR/analysis" -name "*.md" 2>/dev/null | while read -r file; do + filename=$(basename "$file") + if [[ ! $filename =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}_.*-analysis\.md$ ]]; then + echo -e "${YELLOW}⚠️ 命名不規範: $filename${NC}" + naming_issues=$((naming_issues + 1)) + fi + done +fi + +# 檢查決策記錄命名 +if [ $decisions_count -gt 0 ]; then + echo "檢查決策記錄命名規範..." + find "$REPORTS_DIR/decisions" -name "*.md" 2>/dev/null | while read -r file; do + filename=$(basename "$file") + if [[ ! $filename =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}_.*-decision\.md$ ]]; then + echo -e "${YELLOW}⚠️ 命名不規範: $filename${NC}" + naming_issues=$((naming_issues + 1)) + fi + done +fi + +if [ $naming_issues -eq 0 ]; then + echo -e "${GREEN}✅ 所有報告命名規範正確${NC}" +fi + +echo "" + +# 報告健康度評估 +echo -e "${PURPLE}🏥 5. 報告系統健康度${NC}" +echo "----------------------------------------" + +health_score=100 + +# 扣分邏輯 +if [ $total_reports -eq 0 ]; then + health_score=$((health_score - 50)) + echo -e "${RED}📊 無報告: -50分${NC}" +elif [ $total_reports -lt 3 ]; then + health_score=$((health_score - 20)) + echo -e "${YELLOW}📊 報告較少: -20分${NC}" +fi + +if [ $total_reports -gt $linked_reports ]; then + missing_links=$((total_reports - linked_reports)) + deduction=$((missing_links * 10)) + health_score=$((health_score - deduction)) + echo -e "${YELLOW}🔗 未連結報告: -${deduction}分${NC}" +fi + +# 確保分數不為負數 +if [ $health_score -lt 0 ]; then + health_score=0 +fi + +echo "" +echo "🏆 報告系統健康度: $health_score/100" + +if [ $health_score -ge 80 ]; then + echo -e "${GREEN}🎉 狀態: 優秀${NC}" +elif [ $health_score -ge 60 ]; then + echo -e "${YELLOW}👍 狀態: 良好${NC}" +elif [ $health_score -ge 40 ]; then + echo -e "${YELLOW}⚠️ 狀態: 需要改進${NC}" +else + echo -e "${RED}🚨 狀態: 需要緊急處理${NC}" +fi + +echo "" + +# 改進建議 +echo -e "${BLUE}💡 改進建議${NC}" +echo "----------------------------------------" + +if [ $total_reports -eq 0 ]; then + echo "• 開始建立第一份分析報告" +elif [ $total_reports -lt 3 ]; then + echo "• 增加報告數量,建立完整的問題分析記錄" +fi + +if [ $total_reports -gt $linked_reports ]; then + echo "• 將 $((total_reports - linked_reports)) 份未連結報告整合到問題系統" +fi + +if [ $naming_issues -gt 0 ]; then + echo "• 修正 $naming_issues 個檔案的命名規範" +fi + +if [ $analysis_count -gt 0 ] && [ $decisions_count -eq 0 ]; then + echo "• 考慮建立技術決策記錄,記錄重要決策過程" +fi + +echo "" +echo -e "${GREEN}✅ 報告檢查完成${NC}" \ No newline at end of file diff --git a/tools/create_report.sh b/tools/create_report.sh new file mode 100755 index 0000000..59881b3 --- /dev/null +++ b/tools/create_report.sh @@ -0,0 +1,165 @@ +#!/bin/bash + +# Drama Ling 報告建立工具 +# 用途:快速建立分析報告或決策記錄 +# 使用方法: ./create_report.sh [類型] "標題" + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPORTS_DIR="$SCRIPT_DIR/reports" +ISSUES_FILE="$SCRIPT_DIR/ISSUES.md" + +# 顏色定義 +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +RED='\033[0;31m' +NC='\033[0m' + +# 顯示使用說明 +show_help() { + echo -e "${BLUE}報告建立工具使用說明:${NC}" + echo "使用方法: $0 [類型] \"標題\"" + echo "" + echo -e "${BLUE}類型:${NC}" + echo " analysis - 建立問題分析報告" + echo " decision - 建立技術決策記錄" + echo "" + echo -e "${BLUE}範例:${NC}" + echo " $0 analysis \"API modules structure check\"" + echo " $0 decision \"Database technology selection\"" +} + +# 建立分析報告 +create_analysis_report() { + local title="$1" + local date=$(date +"%Y-%m-%d") + local safe_title=$(echo "$title" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-') + local filename="${date}_${safe_title}-analysis.md" + local filepath="$REPORTS_DIR/analysis/$filename" + + # 複製模板 + cp "$REPORTS_DIR/templates/analysis-template.md" "$filepath" + + # 替換標題和日期 + sed -i '' "1s/.*# $title 分析報告/" "$filepath" + sed -i '' "s/YYYY-MM-DD/$date/g" "$filepath" + + echo -e "${GREEN}✅ 分析報告已建立: $filepath${NC}" + + # 詢問是否要加入到問題系統 + read -p "是否要在 ISSUES.md 中建立對應的問題追蹤? (y/N): " add_issue + if [[ $add_issue =~ ^[Yy]$ ]]; then + add_to_issues "analysis" "$title" "$filename" + fi + + # 詢問是否要開啟編輯器 + read -p "是否要開啟編輯器編輯報告? (y/N): " edit_report + if [[ $edit_report =~ ^[Yy]$ ]]; then + ${EDITOR:-nano} "$filepath" + fi +} + +# 建立決策記錄 +create_decision_record() { + local title="$1" + local date=$(date +"%Y-%m-%d") + local safe_title=$(echo "$title" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd '[:alnum:]-') + local filename="${date}_${safe_title}-decision.md" + local filepath="$REPORTS_DIR/decisions/$filename" + + # 複製模板 + cp "$REPORTS_DIR/templates/decision-template.md" "$filepath" + + # 替換標題和日期 + sed -i '' "1s/.*# $title 技術決策記錄/" "$filepath" + sed -i '' "s/YYYY-MM-DD/$date/g" "$filepath" + + echo -e "${GREEN}✅ 決策記錄已建立: $filepath${NC}" + + # 詢問是否要加入到問題系統 + read -p "是否要在 ISSUES.md 中建立對應的問題追蹤? (y/N): " add_issue + if [[ $add_issue =~ ^[Yy]$ ]]; then + add_to_issues "decision" "$title" "$filename" + fi + + # 詢問是否要開啟編輯器 + read -p "是否要開啟編輯器編輯記錄? (y/N): " edit_report + if [[ $edit_report =~ ^[Yy]$ ]]; then + ${EDITOR:-nano} "$filepath" + fi +} + +# 加入到問題系統 +add_to_issues() { + local type="$1" + local title="$2" + local filename="$3" + + echo "" + echo "選擇問題優先級:" + echo "1) 🔥 緊急" + echo "2) ⚠️ 重要" + echo "3) 📝 一般" + read -p "請選擇 (1-3, 預設2): " priority + + case $priority in + 1) section="## 🔥 緊急問題" ;; + 3) section="## 📝 一般問題" ;; + *) section="## ⚠️ 重要問題" ;; + esac + + # 建立問題條目 + local report_link="./reports/${type}s/$filename" + if [ "$type" = "analysis" ]; then + issue_line="- [ ] $title"$'\n'" - 📊 **分析報告**: [$title 分析報告]($report_link)"$'\n'" - 📋 **後續行動**: [待填寫]" + else + issue_line="- [ ] $title"$'\n'" - 📋 **決策記錄**: [$title 決策記錄]($report_link)"$'\n'" - 📋 **實施狀態**: [待實施]" + fi + + # 添加到問題文件 + if sed -i '' "/^$section$/a\\ +$issue_line +" "$ISSUES_FILE"; then + echo -e "${GREEN}✅ 已加入到問題追蹤系統${NC}" + else + echo -e "${RED}❌ 加入問題追蹤失敗${NC}" + fi +} + +# 主程式 +main() { + if [ "$1" = "help" ] || [ "$1" = "--help" ] || [ "$1" = "-h" ] || [ $# -eq 0 ]; then + show_help + exit 0 + fi + + local type="$1" + local title="$2" + + if [ -z "$title" ]; then + echo -e "${RED}❌ 錯誤: 請提供報告標題${NC}" + show_help + exit 1 + fi + + echo -e "${BLUE}📊 建立 Drama Ling 報告${NC}" + echo "=================================" + + case $type in + analysis|分析) + create_analysis_report "$title" + ;; + decision|決策) + create_decision_record "$title" + ;; + *) + echo -e "${RED}❌ 未知類型: $type${NC}" + echo "支援的類型: analysis, decision" + show_help + exit 1 + ;; + esac +} + +# 執行主程式 +main "$@" \ No newline at end of file diff --git a/tools/issue.sh b/tools/issue.sh new file mode 100755 index 0000000..4e22de4 --- /dev/null +++ b/tools/issue.sh @@ -0,0 +1,176 @@ +#!/bin/bash + +# 互動式問題管理工具 - 不需要記任何參數! +# 使用方法: ./issue.sh + +ISSUE_FILE="ISSUES.md" + +# 顏色定義 +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +RED='\033[0;31m' +NC='\033[0m' + +# 顯示歡迎訊息 +echo -e "${BLUE}🚨 Drama Ling 問題管理工具${NC}" +echo "================================" + +# 確保問題文件存在 +if [ ! -f "$ISSUE_FILE" ]; then + echo -e "${RED}❌ 找不到 $ISSUE_FILE${NC}" + echo "請確認您在正確的目錄中執行此腳本" + exit 1 +fi + +# 主選單 +while true; do + echo "" + echo -e "${YELLOW}請選擇操作:${NC}" + echo "1) 📝 記錄新問題" + echo "2) 📊 查看問題狀態" + echo "3) ✅ 標記問題為已解決" + echo "4) 📋 查看完整問題列表" + echo "5) 🚪 退出" + echo "" + read -p "請選擇 (1-5): " choice + + case $choice in + 1) + # 記錄新問題 + echo "" + echo -e "${BLUE}📝 記錄新問題${NC}" + echo "---------------" + read -p "問題描述: " problem_desc + + if [ -z "$problem_desc" ]; then + echo -e "${RED}❌ 問題描述不能為空${NC}" + continue + fi + + echo "" + echo "選擇優先級:" + echo "1) 🔥 緊急 - 阻擋開發的嚴重問題" + echo "2) ⚠️ 重要 - 影響進度的重要問題" + echo "3) 📝 一般 - 可以延後的問題" + read -p "請選擇 (1-3, 預設3): " priority + + case $priority in + 1) + section="## 🔥 緊急問題" + priority_text="🔥 緊急" + ;; + 2) + section="## ⚠️ 重要問題" + priority_text="⚠️ 重要" + ;; + *) + section="## 📝 一般問題" + priority_text="📝 一般" + ;; + esac + + # 詢問相關文件 (可選) + read -p "相關文件路徑 (可選,直接按Enter跳過): " file_path + + # 建立問題條目 + issue_line="- [ ] $problem_desc" + if [ -n "$file_path" ]; then + issue_line="$issue_line (檔案: $file_path)" + fi + + # 添加到文件 + if sed -i '' "/^$section$/a\\ +$issue_line +" "$ISSUE_FILE"; then + echo -e "${GREEN}✅ 問題已記錄到: $priority_text${NC}" + else + echo -e "${RED}❌ 記錄失敗${NC}" + fi + ;; + + 2) + # 查看問題狀態 + echo "" + echo -e "${BLUE}📊 問題狀態總覽${NC}" + echo "==================" + + urgent=$(sed -n '/## 🔥 緊急問題/,/## /p' "$ISSUE_FILE" | grep -c "^- \[ \]") + important=$(sed -n '/## ⚠️ 重要問題/,/## /p' "$ISSUE_FILE" | grep -c "^- \[ \]") + normal=$(sed -n '/## 📝 一般問題/,/## /p' "$ISSUE_FILE" | grep -c "^- \[ \]") + resolved=$(grep -c "^- \[x\]" "$ISSUE_FILE") + + echo "🔥 緊急問題: $urgent 個" + echo "⚠️ 重要問題: $important 個" + echo "📝 一般問題: $normal 個" + echo "✅ 已解決: $resolved 個" + + total_open=$((urgent + important + normal)) + echo "" + echo "📊 總計: $total_open 個待處理問題" + + if [ $urgent -gt 0 ]; then + echo "" + echo -e "${RED}🚨 緊急問題:${NC}" + sed -n '/## 🔥 緊急問題/,/## /p' "$ISSUE_FILE" | grep "^- \[ \]" | head -3 + fi + ;; + + 3) + # 標記問題為已解決 + echo "" + echo -e "${BLUE}✅ 標記問題為已解決${NC}" + echo "----------------------" + + # 顯示未解決的問題 + echo "待處理的問題:" + echo "" + + # 顯示緊急問題 + urgent_issues=$(sed -n '/## 🔥 緊急問題/,/## /p' "$ISSUE_FILE" | grep "^- \[ \]") + if [ -n "$urgent_issues" ]; then + echo -e "${RED}🔥 緊急問題:${NC}" + echo "$urgent_issues" | nl -w2 -s') ' + echo "" + fi + + # 顯示重要問題 + important_issues=$(sed -n '/## ⚠️ 重要問題/,/## /p' "$ISSUE_FILE" | grep "^- \[ \]") + if [ -n "$important_issues" ]; then + echo -e "${YELLOW}⚠️ 重要問題:${NC}" + echo "$important_issues" | nl -w2 -s') ' + echo "" + fi + + # 顯示一般問題 + normal_issues=$(sed -n '/## 📝 一般問題/,/## /p' "$ISSUE_FILE" | grep "^- \[ \]") + if [ -n "$normal_issues" ]; then + echo -e "${BLUE}📝 一般問題:${NC}" + echo "$normal_issues" | nl -w2 -s') ' + echo "" + fi + + echo -e "${YELLOW}💡 提示: 請直接編輯 $ISSUE_FILE 文件來標記問題為已解決${NC}" + echo "將 '[ ]' 改為 '[x]' 並移動到 '## ✅ 已解決' 區域" + ;; + + 4) + # 查看完整問題列表 + echo "" + echo -e "${BLUE}📋 完整問題列表${NC}" + echo "==================" + cat "$ISSUE_FILE" + ;; + + 5) + # 退出 + echo "" + echo -e "${GREEN}👋 再見!${NC}" + exit 0 + ;; + + *) + echo -e "${RED}❌ 無效選擇,請輸入 1-5${NC}" + ;; + esac +done \ No newline at end of file diff --git a/tools/setup_aliases.sh b/tools/setup_aliases.sh new file mode 100755 index 0000000..24b9d75 --- /dev/null +++ b/tools/setup_aliases.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +# Drama Ling 專案命令別名設置腳本 +# 將常用命令設置為全域可用 + +PROJECT_PATH="/Users/jettcheng1018/code/dramaling-app" +SHELL_CONFIG="" + +# 檢測 shell 類型 +if [ -n "$ZSH_VERSION" ]; then + SHELL_CONFIG="$HOME/.zshrc" +elif [ -n "$BASH_VERSION" ]; then + SHELL_CONFIG="$HOME/.bash_profile" +else + echo "無法檢測 shell 類型,請手動設置" + exit 1 +fi + +echo "🔧 設置 Drama Ling 專案命令別名" +echo "=================================" +echo "Shell 設定檔: $SHELL_CONFIG" +echo "專案路徑: $PROJECT_PATH" +echo "" + +# 檢查設定檔是否存在 +if [ ! -f "$SHELL_CONFIG" ]; then + touch "$SHELL_CONFIG" +fi + +# 建立別名設定 +ALIASES=" +# Drama Ling 專案別名 (自動生成 - $(date)) +alias dl='cd $PROJECT_PATH && ./drama' +alias dl-issue='cd $PROJECT_PATH && ./drama issue' +alias dl-check='cd $PROJECT_PATH && ./drama check' +alias dl-report='cd $PROJECT_PATH && ./drama report' +alias dl-consistency='cd $PROJECT_PATH && ./drama consistency' +alias dl-all='cd $PROJECT_PATH && ./drama all' +alias dl-cd='cd $PROJECT_PATH' +" + +# 檢查是否已經有設定 +if grep -q "Drama Ling 專案別名" "$SHELL_CONFIG"; then + echo "⚠️ 發現已有別名設定" + read -p "是否要更新別名設定? (y/N): " update_choice + + if [[ $update_choice =~ ^[Yy]$ ]]; then + # 移除舊設定 + sed -i '' '/# Drama Ling 專案別名/,/^$/d' "$SHELL_CONFIG" + echo "$ALIASES" >> "$SHELL_CONFIG" + echo "✅ 別名設定已更新" + else + echo "❌ 取消更新" + exit 0 + fi +else + # 新增設定 + echo "$ALIASES" >> "$SHELL_CONFIG" + echo "✅ 別名設定已新增" +fi + +echo "" +echo "🎯 可用的命令別名:" +echo " dl - 🎭 主入口點(顯示選單)" +echo " dl-issue - 📝 記錄/管理問題" +echo " dl-check - 📊 查看問題狀態" +echo " dl-report - 📊 建立分析報告" +echo " dl-consistency - 🔍 執行一致性檢查" +echo " dl-all - 🚀 執行全部檢查" +echo " dl-cd - 📁 切換到專案目錄" +echo "" +echo "💡 使用方法:" +echo " 1. 重新啟動終端機 或" +echo " 2. 執行: source $SHELL_CONFIG" +echo "" +echo "然後就可以在任何位置使用 'dl' 或 'dl-issue' 等命令了!" \ No newline at end of file