22 KiB
AwoooP Master Workplan(P0 防爆版)
狀態:規劃凍結基準
日期: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 位 Agent(critic / 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 Paradox(cron/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 9(K8s 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 outbox,worker 可能吃舊 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 | 所有 entrypoint(cron / job / webhook / CLI / healthcheck)需 inventory 並標 requires_project_id |
🔴 | Phase 0 Inventory |
2. Pre-flight Audit(Phase 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-1:Redis Key Inventory | 全 codebase grep redis_client.*\(["'] + r\.set/get/scan → 列出 43+ 個 key、命名空間、TTL、用途、寫入點、讀取點、是否硬碼跨檔 |
#1、#15 |
| INV-2:Repository Project-id Retrofit Map | 列出全部 30+ 張業務表、目前有無 project_id 欄位、所有 repository 方法、需加 filter 的查詢、需 backfill 的歷史資料 |
#3 |
| INV-3:Entrypoint Inventory | 列出所有 cron job / scheduler / webhook / CLI script / healthcheck / internal service call,標記 requires_project_id / platform_internal / legacy_awoooi_default |
#5、#24 |
| INV-4:Hardcoded Namespace & IP Inventory | 列出所有硬碼 K8s namespace(awoooi-prod)、SSH 主機 IP、白名單,標記 tenant-scope 改造方案 |
配合 #3 完成多租戶啟用 |
Phase 0 驗收
- ADR-111~115 全部 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。
工作項:
- 核對真實表名:在寫 SQL 前 grep 確認
incidents(非incident_records)、mcp_audit_log(非mcp_audit_snapshots),全部錯名修正 - ORM 同步現況:使用 SQLAlchemy 2.x
mapped_column、補齊Numeric/UniqueConstraint/funcimport - 每個 migration 都有 rollback SQL(down migration 強制)
- 新增 contract control 表:
awooop_projects(tenant 主表,project_idPK)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-113,active revision 切換事件)awooop_channel_event_dedupe(ADR-114,idempotency 唯一鍵)awooop_platform_subjects(ADR-115,canonical principal)
- 高流量表 partition 策略決定(不延後):
awooop_run_state、awooop_channel_event、awooop_mcp_gateway_audit、awooop_agent_audit_log一律按月 partition- 每 tenant retention policy(預設 90 天 hot + 1 年 warm)
project_id對既有表的策略:暫不在現有 30+ 業務表加欄位(留給 Phase 2),先在 AwoooP 自己的表強制project_id NOT NULL- immutability 測試:published revision 嘗試 UPDATE 必失敗、draft 與 active 隔離
- 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。
工作項:
- Redis 三階段雙寫遷移(依 INV-1):
- 階段 A:dual-write 新舊 key(30 天觀察)
- 階段 B:dual-read,新 key 為主、舊 key 為 fallback(14 天)
- 階段 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第二定義)
- Repository project_id 改造(依 INV-2):
- 所有 30+ repository 方法加
project_idfilter - K8s namespace 白名單 → tenant-aware 設定(依 INV-4)
- SSH 主機白名單 → tenant-aware
- 所有 30+ repository 方法加
- Redis working memory project 邊界(#15):
incident_service.py:603的SCAN incident:*→SCAN {project_id}:incident:*- 所有
SCAN/KEYS必須帶 prefix
platform_resource例外名單:Ollama failover state、global rate limit、leader election lock 等明確標記;GCP Ollama 正式路徑依 ADR-125 改為 WireGuard mesh + AwoooP Inference Gateway,110 nginx proxy 僅保留為過渡 / rollback bridge- 回歸測試:cross-project read/write 必拒絕;platform_resource 必允許但寫 audit
- 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_idfilter,cross-project test 全紅 - 無任何 hardcode tenant 字串殘留(grep
awoooi-prod/192.168必為 0)
Phase 3 — Contract Packages & Validators
目標:六合約從散文升級為可驗證程式。
工作項:
- 建立
packages/awooop-contracts/(此時才建立) - 六合約 JSON Schema + Pydantic models
- envelope schema:platform invocation、MCP tool call、run state、channel events
- Output schema validator middleware:LLM 回傳必先過 schema、失敗 retry 上限硬碼、失敗不外漏到 channel
- golden fixtures(valid + invalid)
- Contract publish governance(依 ADR-112):
- CODEOWNERS 對
packages/awooop-contracts/ - publish API 簽章驗證
- activate 動作要 approval workflow
- CODEOWNERS 對
驗收:
- 任何 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 行為。
工作項:
/v1/platform/runsAPI(async)run_id/trace_id生成(W3C tracecontext-compatible)- project + agent contract revision 解析
- EffectivePolicy 解析(不改 provider 行為)
- Run state machine(依 ADR-114):
lease_until、heartbeat_at、attempt_count欄位- SKIP LOCKED 取單
- stale run reaper(每分鐘掃 expired lease)
- Idempotency(依 ADR-114):
(project_id, channel_type, provider_event_id)unique- duplicate event return 既有 run
- Audit log redaction(#13):
- audit sink 寫入前過
sanitization_service - PII / secret pattern 硬攔
- audit sink 寫入前過
- Observability label rules(#21):
- metrics label 限定
project_id/agent_id/status/provider run_id/trace_id/session_id只進 logs/traces
- metrics label 限定
- 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 授權搬到 Gateway,read-only 工具先進。
工作項:
- Gateway 表:tool registry、grants、credential refs、audit
- wrap 既有 read-only MCP tool
- 強制:
Project AND Agent AND Tool AND Environment AND Approval五重交集 - Result sanitization enforcement point(#8、#14):
- 所有 MCP result 必經
sanitization_servicepipeline - 不允許 raw result 直接進 LLM context
- 所有 MCP result 必經
_provider→__provider(#9):- 雙底線真 private
- 加 unit test:外部 reflect 取用 must fail
- Audit log 雙層 redaction(#13):
- 進 LLM 前一層
- 進 audit sink 一層
- 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。
工作項:
- 建立
project_id=ewoooc - 註冊
openclaw-bizagent contract - 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 入口優先
- 不只是改
- EwoooC 市場情報 tools 註冊為 read-only MCP Gateway tool
- EwoooC bot/business-analysis 事件先 mirror 到 shadow,14 天後升 canary
驗收:
- EwoooC 可跑 read-only AwoooP shadow/canary,0 接觸 AWOOOI 資料
- business-agent context 不可讀 infra-only AWOOOI context
- budget / audit 完全 project-scoped
Phase 7 — Communication Hub Increment(補 progressive feedback)
目標:標準化 channel 但不切斷既有 bot。
工作項:
awooop_conversation_event+awooop_outbound_message表(partition + retention 已在 Phase 1)- Telegram inbound mirror 先進
- Progressive Feedback Policy(async UX gap,#補充):
- WAITING_TOOL / RUNNING / WAITING_APPROVAL 必發暫態訊息
- 用 Telegram message edit 更新(非新訊息)
- 既有 bot handler 維持權威,直到 canary 通過量化 gate
- adapter-level escaping、redaction、idempotency、delivery audit
- Canonical principal mapping(依 ADR-115):所有 channel sender 寫入
awooop_platform_subjects
驗收:
- channel adapter 0 LLM 呼叫、0 MCP 呼叫
- async run 有進度更新(≤30s 必有第一則)
- duplicate retry 不產生 duplicate run(INV-1 + Phase 4 idempotency 已就位)
Phase 8 — Suggest & Controlled Write Paths(補 approval token signing)
目標:從 read-only 升級到 propose、再到 controlled execute。
工作項:
- AWOOOI SRE 部分流程啟用
suggest - Approval resume 安全強化(#10、#11):
- resume API 強制驗
approval_token(HMAC-signed) - approval state PG 為 source of truth、Redis 為 cache
- approval 過期 / 已決 / 重放都拒絕
- resume API 強制驗
- dry-run 與 rollback evidence gate
- write/execute 預設 disabled,feature flag 控制
- 量化 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 |
1~10 是 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-111~115、4 份 Inventory、ADR-106 補章 | 低 |
| schema | 新增 8 張 AwoooP 控制面表(Phase 1) | 中(DB migration) |
| schema | 30+ 業務表加 project_id 欄位 + backfill(Phase 2) |
高(DB migration、要 db-expert review) |
| Redis | 全 codebase 43+ key 三階段雙寫遷移(Phase 2) | 高(影響費用、Telegram、silence、ollama failover) |
| code | 30+ repository 加 project_id filter(Phase 2) |
中(regression risk) |
| code | wrap MCP provider 為 Gateway(Phase 5) | 中 |
| infra | partition + retention runbook(Phase 1) | 低 |
| infra | K8s ConfigMap 預載 agent prompt(Task 9 提前) | 中 |
| security | __provider 雙底線、approval token 簽章(Phase 5、8) |
中 |
| feature flag | suggest mode、controlled write(Phase 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 |
|---|---|---|
| 排序 1~10(docs-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.mddocs/adr/ADR-107-awooop-control-plane-storage.mddocs/adr/ADR-105-revert-a2-ollama-primary.mddocs/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.mddocs/LOGBOOK.md