感謝你對 CyPulse 的貢獻!本文件說明如何參與開發。
git clone https://github.com/your-org/cypulse.git
cd cypulse
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# 安裝 pre-commit hook(flake8 + black --check + hygiene)
pip install pre-commit
pre-commit install為何需要 pre-commit? 本專案的 .pre-commit-config.yaml 會在每次 commit
前執行 flake8(對齊 .flake8 的 100 字元設定)、black --check 與基本 hygiene
(trailing whitespace、large files、private-key scanner)。GitHub Actions CI
同樣會跑這些檢查,本地先通過能避免 CI 失敗。
- 語言:Python 3.10+
- 命名:snake_case
- Commit:Conventional Commits(
feat:,fix:,docs:,test:,refactor:) - 分支策略:GitHub Flow(從 main 開 feature branch,PR 合回 main)
- 註解語言:繁體中文
所有 PR 必須包含對應測試(TDD 優先):
make test # 執行全部測試
make coverage # 確認覆蓋率 ≥ 80%
make lint # 程式碼風格檢查目前已有 M1–M8。若要擴充至 M9:
-
在
cypulse/analysis/建立新模組,實作AnalysisModuleABC:from cypulse.analysis.base import AnalysisModule from cypulse.models import Assets, ModuleResult class MyModule(AnalysisModule): def module_id(self) -> str: return "M9" def module_name(self) -> str: return "模組名稱" def weight(self) -> float: return 0.02 # 新模組會從既有模組借調權重 def max_score(self) -> int: return 2 def run(self, assets: Assets) -> ModuleResult: ...
-
在
tests/test_analysis/補齊測試(mock 所有外部呼叫) -
在
cypulse/scoring/weights.py新增權重定義,確保 WEIGHTS 總和仍為 1.0 -
更新
docs/SRS.md(新增 FR)與docs/SDS.md(新增設計) -
建立 ADR 記錄權重借調決策:
make adr-new TITLE="..." -
更新
ROADMAP.yaml(新增 task)與README.md/CHANGELOG.md
- Fork → 建 feature branch
- 實作 + 測試(覆蓋率不得下降)
make lint通過- PR 標題遵循 Conventional Commits
- 描述說明改動動機與測試方式
請使用 GitHub Issues,並提供:
- CyPulse 版本(
cypulse --version) - 作業系統與 Python 版本
- 最小重現步驟
- 實際 vs 預期行為