For agentic workers: REQUIRED SUB-SKILL: Use
superpowers:subagent-driven-development(recommended) orsuperpowers:executing-plansto implement each phase plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.
Spec: design.md
Goal: 讓使用者透過 Google Drive 上傳 AO evidence 檔案,自動同步進系統。完整覆蓋 OAuth 連線、資料夾自動建立、改名同步、Drive→系統雙向偵測、UI 來源辨識。
Architecture: 三階段獨立交付:(1) OAuth 設定頁、(2) 資料夾建立 & 改名同步、(3) Drive→系統檔案/刪除同步。每階段都能獨立驗收與 demo。
Tech Stack: Python 3.11 / Flask / SQLAlchemy / dependency-injector / google-api-python-client / google-auth-oauthlib / cryptography (Fernet) / APScheduler / Vue3 (Composition API) / PrimeVue / Pinia / Playwright (verification)
| Phase | 標題 | 文件 | 主要交付 | 估時 |
|---|---|---|---|---|
| 1 | OAuth 連線 & 整合設定頁 | implementation-plan-phase-1-oauth.md |
admin 可連 Drive,UI 顯示連線狀態 | 3-5 天 |
| 2 | 資料夾建立 & 改名同步 | implementation-plan-phase-2-folders.md |
PM 啟動 project → Drive 出現完整 6 層資料夾結構(含 task 層);entity 改名同步到 Drive | 5-7 天 |
| 3 | Drive → 系統 同步 | implementation-plan-phase-3-sync.md |
user 在 Drive task folder 上傳 → 系統 evidence 出現;Drive 刪除 → 系統軟刪 | 7-10 天 |
v0.2 變更(2026-04-24):folder structure 從 5 層改為 6 層(加入 Task 層)。原因:1 AO 對應 N task(job_execution),evidence 必須綁特定 task 才能正確記錄。Phase 2 已完成 5 層實作,6 層支援的補強寫在 Phase 2 plan 各 Task 的「v0.2 Addendum」區塊與 Task #59;Phase 3 plan 同步調整(Task 9.5 變為不必要、handler payload 改用 task_mapping_uid、
RECONCILE_AO_FOLDER→RECONCILE_TASK_FOLDER)。詳見 design.md v0.2 修訂與 changelog2026-04-24-google-drive-folder-init-and-rename-sync.md的「後續變更」段。
Phase 1 (foundation)
│
▼
Phase 2 (uses tenant_drive_integrations + adds folder mappings + worker infra)
│
▼
Phase 3 (uses worker infra + adds webhook + change processing)
來自 CLAUDE.md:
api/ 不直接呼叫 get_session()、不 import ORM model;只負責 HTTP 邊界app/ 不直接 import ORM model;DB 操作必須走 domain service → repositorydomain/ 定義 repository interface (abstract),不依賴 infrainfra/ 是唯一可以 self.session / ORM query 的地方google-api-python-client = "^2.130.0"
google-auth-oauthlib = "^1.2.0"
google-auth-httplib2 = "^0.2.0"
cryptography = "^42.0.0" # 已有則跳過
apscheduler = "^3.10.0" # Phase 2 才會 import,Phase 1 可一起加poetry install。GOOGLE_DRIVE_OAUTH_CLIENT_ID = os.getenv("GOOGLE_DRIVE_OAUTH_CLIENT_ID", "")
GOOGLE_DRIVE_OAUTH_CLIENT_SECRET = os.getenv("GOOGLE_DRIVE_OAUTH_CLIENT_SECRET", "")
GOOGLE_DRIVE_OAUTH_REDIRECT_URI = os.getenv("GOOGLE_DRIVE_OAUTH_REDIRECT_URI", "")
DRIVE_TOKEN_ENCRYPTION_KEY = os.getenv("DRIVE_TOKEN_ENCRYPTION_KEY", "")
DRIVE_WEBHOOK_PUBLIC_BASE_URL = os.getenv("DRIVE_WEBHOOK_PUBLIC_BASE_URL", "")
DRIVE_SYNC_WORKER_POOL_SIZE = int(os.getenv("DRIVE_SYNC_WORKER_POOL_SIZE", "4"))
DRIVE_FILE_SIZE_LIMIT_MB = int(os.getenv("DRIVE_FILE_SIZE_LIMIT_MB", "20"))python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"https://staging.example.com/api/integrations/google-drive/callbackhttps://www.googleapis.com/auth/drive + userinfo.emaildrive_last_modifying_user_email 匯出顯示位置這些不阻擋 Phase 1-3 開發,但要在上 production 前收掉。
3 份 plan 都建議用 subagent-driven-development: