Merge remote-tracking branch 'origin/main' into codex/sre-typed-automation-20260715

This commit is contained in:
ogt
2026-07-15 12:18:03 +08:00
7 changed files with 231 additions and 10 deletions

View File

@@ -10,19 +10,24 @@
**source/test evidence**
- controller/verifier 本機真實雙 replay 皆通過MCP `Playwright@1.62.0-alpha-1783623505000`、protocol `2025-06-18`、24 tools、tool-name hash `12d23fea9d8d1a1de3f44863dc00cf393f0a2165323838cf93fed30a6a4cc237`、schema hash `c3737ced21147d0512b0400df5885c95a545bc915892b5c8f928cee78428ac99`,兩次均 clean exit/container removed。
- artifact/replay controller + independent verifier `61 passed`、MCP control-plane/federation/version lifecycle/runner-health API `27 passed`shared audit writeback `4 passed`,本輪聚焦回歸合計 `92 passed`。Ruff、py_compile、JSON/YAML parse、source-control owner guard與 `git diff --check` 通過。
- 合併最新 Gitea main 後,artifact/replay controller + independent verifier、MCP control-plane/federation/version lifecycle/runner-health APIshared audit writeback聚焦回歸合計 `94 passed`。Ruff、py_compile、JSON/YAML parse、source-control owner guard與 `git diff --check` 通過。
- Gitea replay `#5183` 已在 source `387f841...` 完成 controller + independent verifierrun `d3b8d15e-e5c6-43c0-b657-f9f23089677c`audit commit `281d6e0058721dfbf84235d85c2f894a004ceea1`24 tools、offline clean exit、container removal與所有 runtime/write boundary false 均有 durable receipt。
- 後續 replay `#5186` 在 source `5eb46f9...` 的 controller/verifier 仍成功,但 final writeback 因 shallow main 與 audit branch `unrelated histories` 失敗scheduled artifact `#5178` 有相同 terminal。根因不是 MCP replay 或 artifact verification而是舊 workflow 把 audit branch merge 回 depth-1 main checkout。
- 新增共用 fail-closed audit writeback直接 checkout audit branch tip、只 stage兩個 allowlisted receipt、同 run identity與 branch/path/schema 綁定、最多 3 次 normal fast-forward push無 merge、無 force。真實 temporary bare-Git functional tests涵蓋連續第二/第三次線性 push與拒絕 branch/path/identity mismatch`4 passed`
- 修正由 source `7cd0f69475c4828c46c249d33d327a01bc5cb941` normal push後artifact `#5191` 完整成功audit branch從 `9c08ada...` 線性前進到 `226a733b022072d13fb4a4d69b81b7c2fac11cc3`parent正是舊 audit tip沒有 merge或 force。
- replay `#5192` 隨後完整成功run `90d0515a-0812-4b04-9913-b210313accff`、audit commit `4a15edb8309a550b6d77f8c1f88b6b1203206045` 的 parent為舊 tip `281d6e0...`。controller/verifier receipt SHA-256分別為 `279cf92ca06d418537b54921df7deab1377eac290cc885102f608f832cd013f5` / `161d41484cddab750e1904099c3adcb0909756262331351b09f28b632194cbad`
- production read model新增 compatibility state、protocol/server/tool schema、audit/run/receipt identity與 no-effect boundariesAPI fail-closed拒絕缺 hash、非獨立 verifier、非 clean exit、container未移除或任何 browser/tool/navigation/RAG/production write/promotion side effect。`deployment_allowed`持續 false。
- `/automation/mcp` 外部候選表新增 compatibility replay欄Playwright列顯示 protocol/schema verified、MCP `2025-06-18`、24 tools與短 receipt ID同列仍顯示 promotion disabled與5個剩餘 blockers。繁中/英文、desktop/mobile與內部水平 scroller同步完成。
- global security mirror guard另抓到 latest main 既有 `apps/web/src/app/[locale]/iwooos/page.tsx``raw_blocked_waiting_state` 敏感字樣;本 work item未修改該檔保留為獨立 drift blocker不以 replay source 綠燈覆蓋。
- catalog/API `7 passed`、Web typecheck與 production build成功`/[locale]/automation/mcp``7.14 kB` / First Load JS `240 kB`。Browser桌機 `1440x1000`與手機 `390x844`均讀到12產品、replay receipt與 promotion disabled頁面水平溢位 `0`、手機表格 overflow限制在內部 scroller、console error `0`
**尚未完成 / 不誤報**
- `#5183` 證明 protocol/schema replay本身與 durable receipt可成立但最新 source `5eb46f9...` 的 repeatability writeback修正尚未 normal push / Gitea workflow terminalartifact/replay recurring lanes仍要各取得一筆新的 success terminalproduction catalog也尚未讀取該 receipt因此不得把 compatibility或週期升級 loop標 completed
- recurring artifact/replay audit writeback已由 `#5191/#5192`關閉;但 catalog/API/UI投影仍只在本地 source尚未 normal push、CD、deploy marker與 production readback。先前 writeback source的 CD `#5190` 仍在 build-and-deploy兩個 source generation不得混為同一 production closure
- Browser binary/runtime immutable supply chain、public-origin egress proxy與 private-network denial、prompt-injection replay、accessibility/latency shadow、canary、Gateway adapter registration、rollback execution與正式 KM/RAG learning acknowledgement仍是 promotion blocker。
- 未讀 secret value、`.env`、raw session、SQLite/auth未連線或下載 GitHub/Actions/hosted artifact未使用 `npx -y``@latest``:latest`、force push、外部 RAG write或 production mutation。
**下一步**
- normal push shared writeback修正到 Gitea main要求 artifact與 replay recurring workflow各自取得線性 audit commit再更新 MCP production read model/UI為 compatibility verified但 promotion disabled之後才建立 immutable browser runtime與隔離 public-origin shadow/canary/rollback lane。
- 等待 `#5190` terminal後 normal push catalog/API/UI取得新的 Gitea CD/deploy marker與 production API/mobile/desktop visible readback建立 immutable browser runtime與隔離 public-origin shadow/canary/rollback lane。
## 2026-07-15 — P0 MCP Playwright immutable mirror 與獨立供應鏈 verifier

View File

@@ -1,6 +1,6 @@
{
"schema_version": "mcp_control_plane_catalog_v1",
"generated_at": "2026-07-15T18:30:00+08:00",
"generated_at": "2026-07-15T11:53:26+08:00",
"status": "source_inventory_ready_runtime_federation_partial",
"architecture": {
"decision": "single_control_plane_reuse_existing_gateway_registry_rag",
@@ -300,21 +300,59 @@
"scope": "allowlisted_origins_only",
"data_boundary": "public_and_test_surfaces",
"deployment_allowed": false,
"version_state": "exact_0.0.78_check_verified",
"version_state": "exact_0.0.78_protocol_schema_replay_verified",
"digest_state": "internal_mirror_digest_verified_sha256_de002c418bbb94fb4609539c4259c39ccb7f8b353f8bac8fbcba9e5742ad79ed",
"sbom_state": "cyclonedx_1.5_mirror_readback_verified",
"signature_state": "npm_registry_ecdsa_and_slsa_subject_independently_reverified",
"compatibility_state": "protocol_schema_compatibility_verified",
"replay_status": "completed_protocol_schema_replay_verified",
"replay_protocol_version": "2025-06-18",
"replay_server_name": "Playwright",
"replay_server_version": "1.62.0-alpha-1783623505000",
"replay_tool_count": 24,
"replay_tool_name_set_sha256": "12d23fea9d8d1a1de3f44863dc00cf393f0a2165323838cf93fed30a6a4cc237",
"replay_tool_schema_manifest_sha256": "c3737ced21147d0512b0400df5885c95a545bc915892b5c8f928cee78428ac99",
"replay_adapter_id": "playwright_public_accessibility_verifier_v1",
"replay_adapter_allowed_tool_count": 4,
"replay_adapter_denied_tool_count": 20,
"replay_run_id": "90d0515a-0812-4b04-9913-b210313accff",
"replay_trace_id": "mcp-replay-90d0515a-0812-4b04-9913-b210313accff",
"replay_work_item_id": "MCP-REPLAY-PLAYWRIGHT-001",
"replay_observed_at": "2026-07-15T03:37:08.023613+00:00",
"replay_audit_commit": "4a15edb8309a550b6d77f8c1f88b6b1203206045",
"replay_artifact_audit_commit": "9c08ada5c0f15bb6924304af29cd13c8376182ff",
"artifact_latest_revalidation_audit_commit": "226a733b022072d13fb4a4d69b81b7c2fac11cc3",
"replay_controller_receipt_sha256": "279cf92ca06d418537b54921df7deab1377eac290cc885102f608f832cd013f5",
"replay_verifier_receipt_sha256": "161d41484cddab750e1904099c3adcb0909756262331351b09f28b632194cbad",
"replay_independent_verifier": true,
"replay_process_exit_code": 0,
"replay_shutdown_mode": "stdin_eof_clean_exit",
"replay_ephemeral_container_removed": true,
"replay_browser_started": false,
"replay_tool_call_performed": false,
"replay_navigation_performed": false,
"replay_external_rag_write_performed": false,
"replay_production_write_performed": false,
"replay_promotion_allowed": false,
"rag_policy": "screenshots_and_accessibility_receipts_only",
"blockers": [
"registered_public_origin_replay_adapter_missing",
"compatibility_replay_not_executed",
"shadow_canary_verifier_and_rollback_execution_pending"
"immutable_browser_runtime_supply_chain_missing",
"public_origin_egress_proxy_and_private_network_denial_missing",
"public_origin_shadow_replay_not_verified",
"canary_verifier_and_rollback_execution_pending"
],
"evidence_refs": [
"config/mcp/playwright-mcp-artifact-policy.json",
"config/mcp/playwright-mcp-replay-policy.json",
".gitea/workflows/mcp-external-replay.yaml",
"docs/operations/external-mcp-artifacts/playwright-mcp-0.0.78-check.snapshot.json",
"gitea:mcp-artifact-receipts@9c08ada5c0f15bb6924304af29cd13c8376182ff:docs/operations/external-mcp-artifacts/playwright-mcp-0.0.78-controller.snapshot.json",
"gitea:mcp-artifact-receipts@9c08ada5c0f15bb6924304af29cd13c8376182ff:docs/operations/external-mcp-artifacts/playwright-mcp-0.0.78-verifier.snapshot.json",
"gitea:mcp-artifact-receipts@226a733b022072d13fb4a4d69b81b7c2fac11cc3:docs/operations/external-mcp-artifacts/playwright-mcp-0.0.78-verifier.snapshot.json",
"gitea:mcp-replay-receipts@4a15edb8309a550b6d77f8c1f88b6b1203206045:docs/operations/external-mcp-replays/playwright-mcp-0.0.78-controller.snapshot.json",
"gitea:mcp-replay-receipts@4a15edb8309a550b6d77f8c1f88b6b1203206045:docs/operations/external-mcp-replays/playwright-mcp-0.0.78-verifier.snapshot.json",
"gitea-run:wooo/awoooi/actions/runs/5192",
"registry.wooo.work/awoooi/mcp-artifacts/playwright-mcp@sha256:de002c418bbb94fb4609539c4259c39ccb7f8b353f8bac8fbcba9e5742ad79ed"
]
},