# Session 2 交接 Prompt — C2.1（SSP-scoped endpoints 基礎批）

> 2026-05-22 Session 1 完成後建立。貼以下 ``` 框內容開啟 Session 2。

---

```
你正在接手 SSP 在專案內直接編輯 — Phase C Session 2 實作。

## Session 1 完成狀況（已 ship）

| Phase | Commit | 說明 |
|-------|--------|------|
| C1 | 381d3ec | 9 個 OSCAL SSP 角色 seed 進 system_menus + oscal_roles；兩表加 UNIQUE constraint |
| C8 | be1d286 | _ROLE_LABEL_MAP 清理；_ROLE_LABEL_PATTERNS 擴增到 9 條 |
| C7 | e7f29e3 | 06_外部利用服務 sheet 恢復；TEMPLATE_VERSION v2.0.0 → v2.1.0 |

DB 也已執行 C8 data fix：oscal_responsible_parties 刪除 26 筆 broken role（manager/reviewer/auditor/viewer）。

## 本 Session 目標：C2.1（11 個 SSP-scoped endpoints）

### 必讀文件

1. CLAUDE.md（已自動載入）
2. docs/features/FR-011.3-2605-ssp-edit-in-project/README.md（tracker）
3. docs/features/FR-011.3-2605-ssp-edit-in-project/design-C2.md
4. docs/features/FR-011.3-2605-ssp-edit-in-project/implementation-plan-C2.md（Batch 1 部分）

### C2.1 工作範圍（11 個 endpoint）

**前置**（sequential，其他 endpoint 都依賴）：
- T1：`SspProjectResolver` + `require_ssp_manager` helper + 新 error codes
- T2.1：`module_frame_party_service` 抽 base method（ssp_id 參數化）
- T2.2：`module_frame_ssp_resources_service` 抽 base method

**Endpoint 實作**（T1+T2 完成後可分兩組平行）：
- T3：`/ssp/<ssp_uid>/parties` 4 個 endpoint（GET list / POST / PUT / DELETE）
- T4：`/ssp/<ssp_uid>/ssp-resources` 4 個 endpoint
- T5：`/ssp/<ssp_uid>/system-characteristic` GET + PUT 2 個
- T6：`/projects/<uid>/current-ssp-uid` GET 1 個

### Pre-flight（開工前必跑）

```bash
# 1. 確認 C1 seed 已在 DB
PGPASSWORD='jedi@123!' psql -h 192.168.50.188 -p 25432 -U cmmgr -d guidant_ai_dev \
  -c "SELECT COUNT(*) FROM system_menus WHERE \"group\" = 'ssp_party_role';"
# 預期：9

# 2. 確認 MF service 內部已是 SSP scope
grep -n "scope_type.*ssp\|scope_id=ssp" \
  app/module_frame/service/module_frame_ssp_resources_service.py \
  app/module_frame/service/module_frame_party_service.py | head -10

# 3. 確認 GrcErrorCode 下一個可用序號
grep -E "GRC_4[0-9]+" common/code/grc_error_code.py | tail -10

# 4. 確認 ProjectAssessmentPlanMapping 反查路徑
grep -rn "ProjectAssessmentPlanMapping" domain/ infra/ --include="*.py" | head -5
```

### 規範提醒

- Route 不做 DB 查詢；權限檢查在 app service 層透過 require_ssp_manager
- 每個 public method 都要有 @transaction
- 新 error code 格式：GRC_<HTTP狀態碼><序號>（pre-flight 確認下一個空號）
- git add 只加指定檔案（不用 -A 或 -am）
- 每個 T 各自 commit，不要批量塞一個 commit
- 每個 commit 後更新 README tracker 的 C2 行

### 完成後

- README tracker C2 行狀態改為 shipped + commit hash
- 建立 changelog：docs/changelog/2026-05-22-feat-ssp-project-endpoints-c2-1.md
- 遇到 design 沒覆蓋的情境 → 停下問 user

## Branch

feature/ssp-import-export-phase3（目前所在 branch）

## DB 連線

PGPASSWORD='jedi@123!' psql -h 192.168.50.188 -p 25432 -U cmmgr -d guidant_ai_dev
```
