adventure-table

P3-F Closeout Checklist

P3-F — Full P3 Integration & Closeout。此文件依 實作規格測試指南 收斂 P3-A~P3-E 的整合證據。

狀態:closeout gates 全部完成。Automated non-E2E / PostgreSQL / Windows standalone gate 已通過,本機全套 Playwright 已跑過(見下方 Full Playwright evidence),External MCP E1 HTTPS/TLS gate 已於 2026-09-11 執行通過(見下方「External MCP E1 over HTTPS/TLS」)。p3-e2e.yml 合併進 main 後的 CI dispatch run 亦已於 2026-09-11 全綠(見下方「P3 Full-Stack E2E」)。

P3-F implementation additions

P3-F 沒有新增 gameplay production surface;本階段以整合、regression、resource-safety 與 closeout evidence 為主。Static review 未發現需要修改 production code 的 blocker。

新增/更新:

Static review gate

Static review 在 final non-E2E Actions 前完成。P3-F branch 對 main 的產品行為沒有另開第二套 gameplay path;Human / MCP 仍以 typed actor identity 進既有 application/domain authorization。Review 本輪實際抓到並修正的都是 closeout-test reliability finding:

  1. P3-F browser journey 的 roll visibility enum typo:roller_dmroller_and_dm
  2. waiter gate 原先以固定 sleep 猜測 waiter 進入等待,改成 counting notifier 明確等待 12/12 進入 async wait。
  3. waiter gate 從 direct service proof 升級為 real ASGI route + real PostgreSQL。
  4. 除 DB pool=2 外,再把 AnyIO/Starlette worker limiter 壓到 4,讓錯誤的 sync long-poll 會可靠 fail。
  5. cancellation、durable publish wake、notifier handle cleanup、DB pool cleanup 都加入直接斷言。
  6. (2026-09-11 驗證)p3f-full-integration.spec.ts 原以 DM 填的 label「Read the star chart」過濾 Player 端 roll request,但 SessionRollRequestList.tsx 不渲染 request.label,該 spec 在 191368c 之前從未實際跑過;改為與 P3-C 相同的 .first() 定位,並在 reload 後多送一次 /action 補齊實作規格第 1 條的「reload → continue」。

P3-D / P3-E closeout 已逐項提供 controller epoch、current grant-id + generation、finite pre-session DM TTL、exact handoff origin、admin recovery、End/Abandon atomic revoke、Temporary Instruction、private projection、MCP 2026-07-28、standalone boundary 等細項證據;P3-F 不複製另一套 implementation。

Final non-E2E evidence

2026-09-11 final code/evidence run(在此 closeout 文件提交前的 implementation SHA):

2026-09-11 驗證補測後的 final run(含 Late Join / restart recovery / spec 修正):

Full Playwright evidence

P3 Full-Stack E2Ep3-e2e.yml)為 workflow_dispatch only,而 GitHub 只註冊 default branch 上存在的 dispatch workflow——gh workflow list 目前找不到它,p3-e2e.yml 合併進 main 之前無法 dispatch。依 P2-F 前例,本階段以本機 Docker Linux dev server 的全套 npm run test:e2e:docker 作為 Full E2E 證據;合併後再 dispatch 一次補 CI run id。

Warnings / non-blocking observations

Existing cross-subphase evidence retained

P3-F closeout依賴並重新回歸既有 P3-A~E證據:

Remaining mandatory closeout gates

以下兩項完成前,不得把 P3-F / P3 / P3-E item 14 宣告完成:

1. P3 Full-Stack E2E(CI run)— ✅ 2026-09-11

p3-e2e.yml 隨 P3 合併 commit d6b791emain 後手動 dispatch:

此 workflow 刻意保持 workflow_dispatch only;不得為了自動觸發而改成 push / PR trigger。

2. External MCP E1 over HTTPS/TLS — ✅ 2026-09-11 執行完成

P3-E_CLOSEOUT.mdExternal MCP auth / wire preflight 執行。預定 external client 為 Claude Code CLI 2.1.260;實際執行時 CLI -ploggedIn: false,改用 Claude Desktop Code tab 內建的同一版 Claude Code 2.1.260(Windows 11),wire User-Agent: claude-code/2.1.260 (claude-desktop, agent-sdk/0.3.260)。Codex CLI 0.147.0 已因 legacy 2025-06-18 initialize preflight failure 排除。

實際 evidence(完整 wire 摘要與 journey 表見 P3-E closeout「External MCP E1 執行結果」):

已回寫 P3-E_CLOSEOUT.md 第 14 條為完成,P3-E 標 ✅。

Closeout status

Known limitations / observations