---
document_type: "reference_doc"
service: "MOMENTRY_CORE"
title: "Momentry Core 版本管理規範"
date: "2026-03-23"
version: "V1.0"
status: "active"
owner: "Warren"
created_by: "OpenCode"
tags:
  - "momentry"
  - "core"
  - "版本管理規範"
ai_query_hints:
  - "查詢 Momentry Core 版本管理規範 的內容"
  - "Momentry Core 版本管理規範 的主要目的是什麼？"
  - "如何操作或實施 Momentry Core 版本管理規範？"
---

# Momentry Core 版本管理規範

| 項目 | 內容 |
|------|------|
| 建立者 | Warren |
| 建立時間 | 2026-03-23 |
| 文件版本 | V1.0 |

---

## 版本歷史

| 版本 | 日期 | 目的 | 操作人 | 工具/模型 |
|------|------|------|--------|-----------|
| V1.0 | 2026-03-23 | 創建版本管理規範 | Warren | OpenCode |

---

## 1. 版本與通訊埠對照表

| 版本 | Binary | Port | Redis Prefix | 用途 |
|------|--------|------|--------------|------|
| **Production** | `momentry` | **3002** | `momentry:` | 正式環境 |
| **Development** | `momentry_playground` | **3003** | `momentry_dev:` | 開發測試 |

### 通訊埠嚴禁事項
- ❌ 開發版嚴禁使用 3002
- ❌ 任何 `cargo run` 直接啟動的 server 嚴禁綁定 3002
- ❌ Debug build 嚴禁部署到 3002

---

## 2. 開發環境隔離原則

### 2.1 開發流程
```bash
# 永遠在 3003 開發測試
cd /Users/accusys/momentry_core_0.1

# 開發版啟動 (3003)
cargo run --bin momentry_playground -- server
# 或
cargo run --bin momentry -- server --port 3003
```

### 2.2 測試完成後
1. 確認所有功能在 3003 正常運作
2. 進行 `cargo clippy --lib` 檢查
3. 進行 `cargo test --lib` 測試
4. 確認後才能進行 release

### 2.3 環境變數隔離
```bash
# Development
export MOMENTRY_SERVER_PORT=3003
export MOMENTRY_REDIS_PREFIX=momentry_dev:

# Production (launchd 管理，勿手動設定)
# MOMENTRY_SERVER_PORT=3002
# MOMENTRY_REDIS_PREFIX=momentry:
```

---

## 3. Release 版本管理

### 3.1 Release 前檢查清單

```
□ 開發版 (3003) 功能測試完成
□ cargo clippy --lib 通過
□ cargo test --lib 通過
□ cargo fmt -- --check 通過
□ 所有修改已 commit 到 Gitea
```

### 3.2 Release 流程

```bash
# 1. 確保目前是乾淨的工作目錄
git status

# 2. 備份當前 production binary
BACKUP_DIR="/Users/accusys/momentry/backup/bin"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
cp /Users/accusys/momentry/bin/momentry "${BACKUP_DIR}/momentry_${TIMESTAMP}"

# 3. 停止 production server
sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist
# 或
pkill -f "target/release/momentry server"

# 4. 編譯 release 版本
cargo build --release --bin momentry

# 5. 部署到正式位置
cp target/release/momentry /Users/accusys/momentry/bin/momentry

# 6. 啟動 production server
sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist

# 7. 驗證
curl http://localhost:3002/health
```

### 3.3 Backup 存放位置
```
/Users/accusys/momentry/backup/bin/
├── momentry_20260325_143000  (backup)
├── momentry_20260324_100000
├── momentry_20260323_090000
└── ...
```

---

## 4. Gitea 版本控制

### 4.1 Commit 規範
```
feat:     新功能
fix:      錯誤修復
refactor: 重構
docs:     文件更新
chore:    杂项
test:     测试
```

### 4.2 Release Tag 規範
```bash
# 建立 release tag
git tag -a v0.1.1 -m "Release v0.1.1 - API Key Authentication"
git push origin v0.1.1
```

### 4.3 版本號命名
```
v{major}.{minor}.{patch}
  │      │      └── Patch version (bug fix)
  │      └───────── Minor version (新功能)
  └──────────────── Major version (破壞性變更)
```

### 4.4 Gitea Release 建立
1. 在 Gitea Repo > Releases > New Release
2. 選擇對應的 Tag
3. 填寫 Release Notes
4. 上傳 compiled binary（如需要）

---

## 5. 服務管理

### 5.1 Production Service (launchd)
```bash
# Plist 位置
/Library/LaunchDaemons/com.momentry.api.plist

# 管理指令
sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist   # 啟動
sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist # 停止
sudo launchctl list | grep momentry                                 # 狀態
```

### 5.2 緊急回滾
```bash
# 1. 停止當前服務
sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist

# 2. 恢復上一個 backup
BACKUP_FILE=$(ls -t /Users/accusys/momentry/backup/bin/ | head -1)
cp "/Users/accusys/momentry/backup/bin/${BACKUP_FILE}" /Users/accusys/momentry/bin/momentry

# 3. 重啟服務
sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist

# 4. 驗證
curl http://localhost:3002/health
```

---

## 6. 快速參考卡片

### Development
```bash
# 啟動開發版
cd /Users/accusys/momentry_core_0.1
cargo run --bin momentry_playground -- server

# 或手動指定 port
cargo run --bin momentry -- server --port 3003

# 測試端點
curl -H "X-API-Key: muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69" \
  http://localhost:3003/api/v1/jobs
```

### Production
```bash
# 查看狀態
sudo launchctl list | grep momentry

# 重啟服務
sudo launchctl unload /Library/LaunchDaemons/com.momentry.api.plist
sudo launchctl load /Library/LaunchDaemons/com.momentry.api.plist

# 查看日誌
tail -f /Users/accusys/momentry/log/momentry_release.log
```

### 常用指令
```bash
# 檢查 port 使用
lsof -i :3002  # Production
lsof -i :3003  # Development

# 檢查 process
ps aux | grep momentry | grep server

# 停止所有 momentry server
pkill -9 -f "momentry.*server"
```

---

## 7. 禁止事項

| 項目 | 說明 |
|------|------|
| ❌ 禁止在 3002 測試 | 3002 是 Production，嚴禁用於測試 |
| ❌ 禁止覆蓋 production binary | 使用 backup + deploy 流程 |
| ❌ 禁止跳過測試直接 release | 必須完成檢查清單 |
| ❌ 禁止在未備份的情況下部署 | 每次部署前必須備份 |

---

## 8. 疑難排解

### Q: 3002 無法綁定怎麼辦？
```bash
# 檢查誰在使用
lsof -i :3002

# 停止舊的 server
pkill -9 -f "momentry.*server"
```

### Q: 如何確認使用的是哪個版本？
```bash
# 檢查 binary 位置和版本
file $(which momentry)
./target/release/momentry --version 2>/dev/null || echo "No version flag"
```

### Q: 如何確認有沒有 API Key 驗證？
```bash
# 沒有 API Key 應該返回 401
curl -s http://localhost:3002/api/v1/jobs
# HTTP/1.1 401 Unauthorized
```
