Files
awoooi/docs/awooop/MASTER-WORKPLAN.md

415 lines
22 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AwoooP Master WorkplanP0 防爆版)
**狀態**:規劃凍結基準
**日期**2026-05-03
**主要 ADR**ADR-106架構、ADR-107控制面儲存
**取代**:本檔取代 `IMPLEMENTATION-ROADMAP.md` 作為 AwoooP 主索引;舊 roadmap 仍保留為一階草稿,僅供歷史對照
**整合基準**`docs/awooop/AWOOOI-AWOOOP-AI-AUTONOMOUS-FLYWHEEL-INTEGRATION-PLAN.md`
---
## 0. 為什麼有這份文件
12 位 Agentcritic / vuln-verifier / debugger / db-expert / planner / fullstack-engineer / refactor-specialist / migration-engineer / onboarder / tool-expert / web-researcher / frontend-designer對舊版 Plan 1 與 ADR-106 做完獨立審查後,發現至少 12 個 P0 問題;後續再補了 12 個會在實作後咬人的設計缺口。
2026-05-06 補充AwoooP 不再被視為獨立產品線,而是 AI 自動化飛輪的人機協作控制台、治理層、稽核層與操作層。完整 owner、wave、risk register 與驗收方式以整合基準文件為準。
結論:**直接進 Phase 1 SQL migration 會立刻爆。** 必須先補足 5 份 ADR、4 份 Inventory把 Strangler Fig 的「資料載體、雙寫遷移、邊界硬攔截、可重放、可審計」全部寫死,再下 code。
---
## 1. 共識:實作前必須先完成的修補
| # | 問題 | 風險等級 | 必補在 |
|---|------|---------|--------|
| 1 | Redis key 直接改名無雙寫期 → 費用計數歸零、Telegram 409、silence 失效、Ollama failover 雙寫不到 | 🔴🔴🔴 | Phase 2 之前 |
| 2 | Migration SQL 表名錯(`incident_records` / `mcp_audit_snapshots`)、無 rollback、ORM 1.x vs 2.x | 🔴🔴🔴 | Phase 1 重寫 |
| 3 | `project_id` / `tenant_id` 在 codebase 0 命中30+ 業務表無此欄 | 🔴🔴🔴 | Phase 1 + Phase 2 |
| 4 | `project_migration_state` 表缺失Strangler Fig 無資料載體 | 🔴🔴 | Phase 1 |
| 5 | AWOOOI 雙重身份 Bootstrap Paradoxcron/job/healthcheck 全無 `project_id` | 🔴🔴 | Phase 0 補 ADR-111 |
| 6 | EwoooC 接入零技術路徑,需要 Provider Proxy Adapter 設計 | 🔴🔴 | Phase 0 補 ADR-115 |
| 7 | Strangler shadow→canary→active 無量化 gate 條件 | 🔴🔴 | Phase 0 寫進 ADR-106 補章 |
| 8 | Layer 3 redaction 零實作helper 有但無 enforcement point | 🔴🔴🔴 | Phase 5 |
| 9 | `_provider` 屬性是 public可繞過 audit | 🔴🔴 | Phase 5 |
| 10 | `WAITING_APPROVAL` resume 不驗 caller identity無 approval_token 簽章 | 🔴🔴 | Phase 4 + Phase 8 |
| 11 | Redis approval state 單點,無 PG sync | 🔴 | Phase 2 + Phase 8 |
| 12 | Task 9K8s ConfigMap順序倒置agent prompt 全回 None | 🔴🔴🔴 | Phase 1 之前先順序修正 |
| 13 | Audit log 本身會洩密redaction 必須做在 audit sink 前 | 🔴🔴 | Phase 5 |
| 14 | `sanitization_service.py` 已存在 helper但 MCP Gateway / AgentToolExecutor 沒強制使用 | 🔴🔴 | Phase 5 |
| 15 | Redis working memory`SCAN incident:*`)需要 project 邊界 | 🔴🔴 | Phase 2 |
| 16 | Contract publish 權限與簽章未定義(誰可 publish/activate | 🔴 | Phase 0 補 ADR-112 |
| 17 | Active revision 切換無 transactional outboxworker 可能吃舊 policy | 🔴 | Phase 0 補 ADR-113 |
| 18 | Run/Channel idempotency 缺 key derivation 規則與 unique index | 🔴 | Phase 0 補 ADR-114 |
| 19 | Async worker 缺 lease / heartbeat / stale reaper | 🔴 | Phase 4 |
| 20 | 高流量表(`run_state` / `channel_event` / `mcp_audit` / `agent_audit`partition 與 retention 需 Phase 1 就決定 | 🟠 | Phase 1 |
| 21 | Observability metrics label cardinality 規則:`run_id`/`trace_id`/`session_id` 禁止進 metrics | 🟠 | Phase 4 |
| 22 | Telegram/LINE/Slack/API/Internal 缺 canonical principal mapping | 🟠 | Phase 0 補 ADR-115 |
| 23 | EwoooC Provider Proxy 不能只改 `OLLAMA_API_BASE`,必須補 envelope + audit 入口 | 🔴 | Phase 0 補 ADR-115 |
| 24 | 所有 entrypointcron / job / webhook / CLI / healthcheck需 inventory 並標 `requires_project_id` | 🔴 | Phase 0 Inventory |
---
## 2. Pre-flight AuditPhase 0 擴張)
舊版 Phase 0 只凍 ADR-106/107。新版 Phase 0 還需要 **5 份 ADR + 4 份 Inventory**,全部 docs-only。
### 2.1 5 份必補 ADR ADR-108/109/110 已被其他 ADR 占用AwoooP 從 ADR-111 開始)
| ADR | 主題 | 解決 |
|-----|------|------|
| **ADR-111** | AwoooP Bootstrap Order & Identity Paradox | #5#24 — 定義 hard reject 啟用順序、`platform_internal` / `requires_project_id` / `legacy_awoooi_default` 標記、AWOOOI cron/job 過渡期豁免規則 |
| **ADR-112** | Contract Governance & Publishing Workflow | #16 — 誰可 publish、誰可 activate、CODEOWNERS、簽章/HMAC、approval workflow、activation audit |
| **ADR-113** | Active Revision Invalidation & Outbox | #17`awooop_contract_outbox` 表設計、Redis pub/sub 通知、worker revision-aware cache、split-brain 防禦 |
| **ADR-114** | Idempotency, Worker Lease & Run Recovery | #18#19 — channel event dedupe、`(project_id, channel_type, provider_event_id)` unique、worker `lease_until` / `heartbeat_at` / `attempt_count`、stale run reaper、SKIP LOCKED |
| **ADR-115** | Canonical Principal Mapping & Tenant Onboarding Patterns | #6#22#23 — Telegram/LINE/Slack/API/Internal user → `platform_subject` 統一映射、EwoooC Provider Proxy Adapter 設計、Tsenyang/Bitan 接入模式範本 |
ADR-106 也需要補一節:**Strangler Fig Quantified Gates**,把 shadow → canary → active 的量化條件寫死≥14 天、決策差異率 <5%、p95 退化 <10%、無 P1 incident、cost diff < 預算上限 50%)。
### 2.2 4 份必做 Inventory
| Inventory | 範圍 | 解決 |
|-----------|------|------|
| **INV-1Redis Key Inventory** | 全 codebase grep `redis_client.*\(["']` + `r\.set/get/scan` → 列出 43+ 個 key、命名空間、TTL、用途、寫入點、讀取點、是否硬碼跨檔 | #1#15 |
| **INV-2Repository Project-id Retrofit Map** | 列出全部 30+ 張業務表、目前有無 `project_id` 欄位、所有 repository 方法、需加 filter 的查詢、需 backfill 的歷史資料 | #3 |
| **INV-3Entrypoint Inventory** | 列出所有 cron job / scheduler / webhook / CLI script / healthcheck / internal service call標記 `requires_project_id` / `platform_internal` / `legacy_awoooi_default` | #5#24 |
| **INV-4Hardcoded Namespace & IP Inventory** | 列出所有硬碼 K8s namespace`awoooi-prod`、SSH 主機 IP、白名單標記 tenant-scope 改造方案 | 配合 #3 完成多租戶啟用 |
### Phase 0 驗收
- ADR-111115 全部 Accepted 並進 LOGBOOK
- ADR-106 補 Quantified Gates 章節
- 4 份 Inventory 寫入 `docs/awooop/inventory/`
- 沒有任何 runtime code 變動
- `git diff --check` 通過
---
## 3. 修訂版 8 階段實施計畫
> 階段順序與舊 roadmap 相同,但每階段範圍依 §1 共識重寫。
### Phase 1 — Control Plane Schema Foundation重寫
**目標**:建立 PostgreSQL contract control plane 最小可用骨架,並修正舊 SQL migration 三大 blocker。
工作項:
1. **核對真實表名**:在寫 SQL 前 grep 確認 `incidents`(非 `incident_records`)、`mcp_audit_log`(非 `mcp_audit_snapshots`),全部錯名修正
2. **ORM 同步現況**:使用 SQLAlchemy 2.x `mapped_column`、補齊 `Numeric`/`UniqueConstraint`/`func` import
3. **每個 migration 都有 rollback SQL**down migration 強制)
4. **新增 contract control 表**
- `awooop_projects`tenant 主表,`project_id` PK
- `awooop_contract_revisions`(六合約共用 revision 表append-only
- `awooop_active_revisions`active pointer 表)
- `awooop_artifact_refs`prompt/schema/eval 的 ref + sha256
- `awooop_project_migration_state`Strangler 階段追蹤)
- `awooop_contract_outbox`ADR-113active revision 切換事件)
- `awooop_channel_event_dedupe`ADR-114idempotency 唯一鍵)
- `awooop_platform_subjects`ADR-115canonical principal
5. **高流量表 partition 策略決定(不延後)**
- `awooop_run_state``awooop_channel_event``awooop_mcp_gateway_audit``awooop_agent_audit_log` 一律按月 partition
- 每 tenant retention policy預設 90 天 hot + 1 年 warm
6. **`project_id` 對既有表的策略**:暫不在現有 30+ 業務表加欄位(留給 Phase 2先在 AwoooP 自己的表強制 `project_id NOT NULL`
7. **immutability 測試**published revision 嘗試 UPDATE 必失敗、draft 與 active 隔離
8. **Task 9 順序修正前置**Dockerfile / ConfigMap / agent_loader 預設路徑改動先於任何 agent prompt 載入點變更
驗收:
- AWOOOI 可被表示為 `project_id=awoooi` 且 0 行為改動
- 每個 active revision 都有 `revision_id``body_hash`
- runtime 讀取路徑看不到 mutable draft
- migration up/down 都通過 dry-run
- partition + retention 寫入 runbook
### Phase 2 — Tenant Isolation & Namespace Hardening重寫
**目標**:在開放任何下游 tenant 之前,把 AWOOOI 自己變成乾淨的 tenant。
工作項:
1. **Redis 三階段雙寫遷移**(依 INV-1
- **階段 A**dual-write 新舊 key30 天觀察)
- **階段 B**dual-read新 key 為主、舊 key 為 fallback14 天)
- **階段 C**:移除舊 key 寫入,留 audit log
- **必含**`ai_rate:total_cost:gemini`(費用上限)、`telegram:polling:leader`Pod 鎖)、`telegram_silence:{target}`(含 `decision_manager.py:230` 硬碼)、`ollama:current_primary`(含 `ollama_auto_recovery.py:230` 第二定義)
2. **Repository project_id 改造(依 INV-2**
- 所有 30+ repository 方法加 `project_id` filter
- K8s namespace 白名單 → tenant-aware 設定(依 INV-4
- SSH 主機白名單 → tenant-aware
3. **Redis working memory project 邊界**#15
- `incident_service.py:603``SCAN incident:*``SCAN {project_id}:incident:*`
- 所有 `SCAN`/`KEYS` 必須帶 prefix
4. **`platform_resource` 例外名單**Ollama failover state、global rate limit、leader election lock 等明確標記GCP Ollama 正式路徑依 ADR-125 改為 WireGuard mesh + AwoooP Inference Gateway110 nginx proxy 僅保留為過渡 / rollback bridge
5. **回歸測試**cross-project read/write 必拒絕platform_resource 必允許但寫 audit
6. **AWOOOI Bootstrap Paradox 修補**(依 ADR-111、INV-3
- 標記為 `platform_internal` 的 entrypoint 帶 `project_id=__platform__`hard reject 例外但寫 audit
- 標記為 `legacy_awoooi_default` 的舊 cron 暫時 fallback 到 `project_id=awoooi`,列退場時程
驗收:
- INV-1 列出的所有 P0 key 完成三階段遷移
- 30+ repository 全部加 `project_id` filtercross-project test 全紅
- 無任何 hardcode tenant 字串殘留grep `awoooi-prod` / `192.168` 必為 0
### Phase 3 — Contract Packages & Validators
**目標**:六合約從散文升級為可驗證程式。
工作項:
1. 建立 `packages/awooop-contracts/`(此時才建立)
2. 六合約 JSON Schema + Pydantic models
3. envelope schemaplatform invocation、MCP tool call、run state、channel events
4. **Output schema validator middleware**LLM 回傳必先過 schema、失敗 retry 上限硬碼、失敗不外漏到 channel
5. golden fixturesvalid + invalid
6. **Contract publish governance**(依 ADR-112
- CODEOWNERS 對 `packages/awooop-contracts/`
- publish API 簽章驗證
- activate 動作要 approval workflow
驗收:
- 任何 schema 不符的 LLM 輸出無法到達 channel adapter
- prompt/schema ref 必含 sha256 hash
- 無權限不能 publish 或 activate
### Phase 4 — Platform Shell in Shadow Mode補 lease/idempotency/audit redaction
**目標**:建立第一個 runtime shell但只跑 shadow不改 legacy 行為。
工作項:
1. `/v1/platform/runs` APIasync
2. `run_id` / `trace_id` 生成W3C tracecontext-compatible
3. project + agent contract revision 解析
4. EffectivePolicy 解析(不改 provider 行為)
5. **Run state machine**(依 ADR-114
- `lease_until``heartbeat_at``attempt_count` 欄位
- SKIP LOCKED 取單
- stale run reaper每分鐘掃 expired lease
6. **Idempotency**(依 ADR-114
- `(project_id, channel_type, provider_event_id)` unique
- duplicate event return 既有 run
7. **Audit log redaction**#13
- audit sink 寫入前過 `sanitization_service`
- PII / secret pattern 硬攔
8. **Observability label rules**#21
- metrics label 限定 `project_id` / `agent_id` / `status` / `provider`
- `run_id` / `trace_id` / `session_id` 只進 logs/traces
9. mirror 選定 AWOOOI 事件到 shadow
驗收:
- shadow run 永遠 0 user-visible response、0 destructive tool call
- legacy AWOOOI 行為 0 改變
- worker crash 後 stale run 1 分鐘內被回收
- duplicate retry 不產生重複 run
- audit log 0 secret 命中vuln-verifier 抽樣 100 筆)
### Phase 5 — MCP Gateway First Slice補 sanitization enforcement、_provider 修正、audit redaction
**目標**:把 tool 授權搬到 Gatewayread-only 工具先進。
工作項:
1. Gateway 表tool registry、grants、credential refs、audit
2. wrap 既有 read-only MCP tool
3. 強制:`Project AND Agent AND Tool AND Environment AND Approval` 五重交集
4. **Result sanitization enforcement point**#8#14
- 所有 MCP result 必經 `sanitization_service` pipeline
- 不允許 raw result 直接進 LLM context
5. **`_provider``__provider`**#9
- 雙底線真 private
- 加 unit test外部 reflect 取用 must fail
6. **Audit log 雙層 redaction**#13
- 進 LLM 前一層
- 進 audit sink 一層
7. tool call 記錄 `trace_id` / `run_id` / credential ref / latency / status
驗收:
- agent 程式碼路徑 0 raw credential 接觸sast 掃過)
- raw result 不可能繞過 sanitization單元測試 + 整合測試覆蓋)
- 2026-04-18 secret leak 重演測試kubectl describe configmap 輸出不會出現在任何 LLM context 或 audit row
### Phase 6 — EwoooC Read-Only Tenant Onboarding依 ADR-115
**目標**:以實際下游 tenant 驗證 AwoooP全 read-only。
工作項:
1. 建立 `project_id=ewoooc`
2. 註冊 `openclaw-biz` agent contract
3. **Provider Proxy Adapter**#23
- 不只是改 `OLLAMA_API_BASE`
- Proxy 入口補 envelope`project_id` / `agent_id` / `trace_id` / `run_id`
- 經過 EffectivePolicy + budget guard + audit
- read-only / model-call 入口優先
4. EwoooC 市場情報 tools 註冊為 read-only MCP Gateway tool
5. EwoooC bot/business-analysis 事件先 mirror 到 shadow14 天後升 canary
驗收:
- EwoooC 可跑 read-only AwoooP shadow/canary0 接觸 AWOOOI 資料
- business-agent context 不可讀 infra-only AWOOOI context
- budget / audit 完全 project-scoped
### Phase 7 — Communication Hub Increment補 progressive feedback
**目標**:標準化 channel 但不切斷既有 bot。
工作項:
1. `awooop_conversation_event` + `awooop_outbound_message`partition + retention 已在 Phase 1
2. Telegram inbound mirror 先進
3. **Progressive Feedback Policy**async UX gap#補充
- WAITING_TOOL / RUNNING / WAITING_APPROVAL 必發暫態訊息
- 用 Telegram message edit 更新(非新訊息)
4. 既有 bot handler 維持權威,直到 canary 通過量化 gate
5. adapter-level escaping、redaction、idempotency、delivery audit
6. **Canonical principal mapping**(依 ADR-115所有 channel sender 寫入 `awooop_platform_subjects`
驗收:
- channel adapter 0 LLM 呼叫、0 MCP 呼叫
- async run 有進度更新≤30s 必有第一則)
- duplicate retry 不產生 duplicate runINV-1 + Phase 4 idempotency 已就位)
### Phase 8 — Suggest & Controlled Write Paths補 approval token signing
**目標**:從 read-only 升級到 propose、再到 controlled execute。
工作項:
1. AWOOOI SRE 部分流程啟用 `suggest`
2. **Approval resume 安全強化**#10#11
- resume API 強制驗 `approval_token`HMAC-signed
- approval state PG 為 source of truth、Redis 為 cache
- approval 過期 / 已決 / 重放都拒絕
3. dry-run 與 rollback evidence gate
4. write/execute 預設 disabledfeature flag 控制
5. **量化 gate依 ADR-106 補章)**
- shadow → canary≥14 天 + decision divergence < 5% + p95 退化 < 10%
- canary → active≥7 天 + 0 P1 incident + cost diff < 預算 50%
驗收:
- WAITING_APPROVAL resume 不能在沒 token 的情況下成功vuln-verifier 寫 PoC
- Redis 宕機時 approval 仍可從 PG 恢復
- write/execute 預設 OFF需顯式 feature flag
---
## 4. 跨階段橫向工作項Cross-Cutting
| 工作項 | 跨哪些階段 | 負責 |
|--------|-----------|------|
| **Bootstrap order discipline**ADR-111 | Phase 0、2、4、Forever | platform-runtime |
| **Audit log redaction雙層** | Phase 4、5 | mcp-gateway + runtime |
| **High-traffic table partition + retention** | Phase 1、4、7 | db-expert + sre |
| **Observability label cardinality 規則** | Phase 4 起永久 | observability |
| **Contract outbox / active revision invalidation** | Phase 1 表、Phase 4 worker 用 | platform-runtime |
| **Canonical principal mapping** | Phase 0 ADR、Phase 7 落地 | identity |
| **Approval token signing** | Phase 4 token 簽發、Phase 8 verify | security + runtime |
| **EwoooC Provider Proxy Adapter** | Phase 0 設計、Phase 6 落地 | tenant-onboarding |
---
## 5. 工作排序總表(建議施作順序)
| 順序 | 工作 | 是否 docs-only | 阻擋誰 |
|------|------|--------------|-------|
| 1 | ADR-111 Bootstrap Order | ✅ | Phase 2 |
| 2 | ADR-112 Contract Governance | ✅ | Phase 3 |
| 3 | ADR-113 Active Revision Outbox | ✅ | Phase 1 |
| 4 | ADR-114 Idempotency & Worker Lease | ✅ | Phase 4 |
| 5 | ADR-115 Principal Mapping & EwoooC Proxy | ✅ | Phase 6、7 |
| 6 | ADR-106 補 Quantified Gates 章節 | ✅ | Phase 8 |
| 7 | INV-1 Redis Key Inventory | ✅ | Phase 2 |
| 8 | INV-2 Repository Retrofit Map | ✅ | Phase 2 |
| 9 | INV-3 Entrypoint Inventory | ✅ | Phase 2 |
| 10 | INV-4 Namespace/IP Inventory | ✅ | Phase 2 |
| 11 | Phase 1 schema migration重寫版 | ❌ runtime | Phase 2-8 |
| 12 | Task 9 順序修正Dockerfile/ConfigMap 先) | ❌ runtime | Phase 1 prompt 任何更動 |
| 13 | Phase 2 三階段 Redis 雙寫 + repository project_id | ❌ runtime | Phase 4 起所有 tenant 行為 |
| 14 | Phase 3 contract packages | ❌ runtime | Phase 4 起 |
| 15 | Phase 4 platform shell + shadow + idempotency + audit redaction | ❌ runtime | Phase 5-8 |
| 16 | Phase 5 MCP Gateway + sanitization enforcement + `__provider` | ❌ runtime | Phase 6 read-only tool |
| 17 | Phase 6 EwoooC onboarding via Provider Proxy | ❌ runtime | Phase 7 |
| 18 | Phase 7 Communication Hub + progressive feedback | ❌ runtime | Phase 8 |
| 19 | Phase 8 suggest + approval signing + controlled write | ❌ runtime | 平台 v1 GA |
**110 是 docs-only可以在當前對話視窗連續做完全部完成才開新對話進 Phase 1 code。**
---
## 6. 量化驗收門檻Strangler Fig Gates
每個 tenant × 每個 capability 切換階段都要過:
| 切換 | 必要條件 |
|------|---------|
| pre → shadow | tenant 已建、agent contract published、audit/trace 寫入正常 |
| shadow → canary | ≥14 天 shadow 觀察 + decision divergence < 5% + p95 latency 退化 < 10% + 0 P0/P1 incident + audit 0 secret 命中 |
| canary → read_only | ≥7 天 canary + user-visible response 錯誤率 < 0.5% + cost diff < 預算 50% |
| read_only → suggest | ≥14 天 read_only + agent suggestion accept rate ≥50% + 0 hallucination escalation |
| suggest → auto_remediate | ≥30 天 suggest + rollback evidence ≥3 次成功 + approval token signing live + dry-run pass rate ≥99% |
每個 gate 由 12-Agent critic + db-expert + vuln-verifier 三方簽核,寫進 LOGBOOK。
---
## 7. 授權需求清單(已獲統帥完整授權)
| 類別 | 動作 | 風險 |
|------|------|------|
| docs-only | 寫 ADR-111115、4 份 Inventory、ADR-106 補章 | 低 |
| schema | 新增 8 張 AwoooP 控制面表Phase 1 | 中DB migration |
| schema | 30+ 業務表加 `project_id` 欄位 + backfillPhase 2 | 高DB migration、要 db-expert review |
| Redis | 全 codebase 43+ key 三階段雙寫遷移Phase 2 | 高影響費用、Telegram、silence、ollama failover |
| code | 30+ repository 加 `project_id` filterPhase 2 | 中regression risk |
| code | wrap MCP provider 為 GatewayPhase 5 | 中 |
| infra | partition + retention runbookPhase 1 | 低 |
| infra | K8s ConfigMap 預載 agent promptTask 9 提前) | 中 |
| security | `__provider` 雙底線、approval token 簽章Phase 5、8 | 中 |
| feature flag | suggest mode、controlled writePhase 8 | 高(要 vuln-verifier PoC + dry-run evidence |
不在本授權範圍:
- 提高 paid provider 配額或啟用新雲端 provider仍須 HARD_RULES feedback_cost_change_approval 流程)
- 任何 destructive MCP tool 上線(要 Phase 8 evidence 才開)
- Telegram/LINE/Slack webhook 直接切走(必須先 shadow → canary → 量化 gate
---
## 8. Codex 工作模式建議
| 階段 | 對話 | cwd |
|------|------|-----|
| 排序 110docs-only | 當前對話可直接完成 | `/Users/ogt/awoooi` |
| 排序 11 起runtime code | 新開 Codex 對話 + 乾淨 worktree | `/Users/ogt/awoooi` |
實作對話 kickoff prompt 模板:
```
讀完:
- AGENTS.md
- docs/12-agent-game-rules.md
- docs/LOGBOOK.md 最新一篇
- docs/adr/ADR-106 / 107 / 108 / 109 / 110 / 111 / 112
- docs/awooop/MASTER-WORKPLAN.md
- docs/awooop/inventory/ INV-1 ~ INV-4
只做 Phase {N}。不擴張範圍、不改 provider 行為、不切 channel webhook、不建空目錄。
完成後輸出 [P7-COMPLETION]。
```
---
## 9. 參考
- `docs/adr/ADR-106-agent-platform-architecture.md`
- `docs/adr/ADR-107-awooop-control-plane-storage.md`
- `docs/adr/ADR-105-revert-a2-ollama-primary.md`
- `docs/adr/ADR-111-awooop-bootstrap-order.md`(待寫)
- `docs/adr/ADR-112-awooop-contract-governance.md`(待寫)
- `docs/adr/ADR-113-awooop-active-revision-outbox.md`(待寫)
- `docs/adr/ADR-114-awooop-idempotency-worker-lease.md`(待寫)
- `docs/adr/ADR-115-awooop-principal-mapping-tenant-onboarding.md`(待寫)
- `docs/awooop/inventory/INV-1-redis-keys.md`(待寫)
- `docs/awooop/inventory/INV-2-repository-project-id-retrofit.md`(待寫)
- `docs/awooop/inventory/INV-3-entrypoints.md`(待寫)
- `docs/awooop/inventory/INV-4-hardcoded-namespace-ip.md`(待寫)
- `docs/12-agent-game-rules.md`
- `docs/LOGBOOK.md`