fix(mcp): refresh workflow inventory after mirror lane

This commit is contained in:
ogt
2026-07-15 09:59:26 +08:00
parent 5ce3db6bb3
commit 0421b17d26
6 changed files with 73 additions and 18 deletions

View File

@@ -798,7 +798,7 @@ _AI_AUTOMATION_PROGRAM_WORK_ITEMS: list[dict[str, Any]] = [
"problem": "Gitea runner 仍會把 actions/checkout 等 action 從 github.com 抓入執行環境GitHub freeze 尚未覆蓋 CI action resolution。",
"professional_practice": "self-hosted action registry、immutable digest pinning、SBOM/provenance、network egress verification",
"asset_scope_ids": ["products", "tools", "packages", "observability_and_security"],
"observed_awoooi_gitea_workflow_file_count": 13,
"observed_awoooi_gitea_workflow_file_count": 14,
"observed_awoooi_external_action_reference_count": 18,
"acceptance": [
"所有產品的 Gitea workflow action 只由受控 Gitea mirror 或 repo-owned immutable action 供應",

View File

@@ -17,7 +17,7 @@ def test_gitea_actions_secret_variable_name_inventory_loader_is_value_safe() ->
)
assert payload["status"] == "gitea_actions_secret_variable_name_inventory_ready"
assert payload["ready"] is True
assert payload["summary"]["workflow_file_count"] == 13
assert payload["summary"]["workflow_file_count"] == 14
assert payload["summary"]["referenced_secret_name_count"] == 26
assert payload["summary"]["referenced_variable_name_count"] == 0
assert payload["summary"]["secret_values_collected"] is False

View File

@@ -148,16 +148,16 @@ def test_gitea_capability_readback_rolls_up_complete_feature_surface() -> None:
assert payload["rollups"]["expected_product_count"] == 12
assert payload["rollups"]["ssh_verified_product_repo_count"] == 12
assert payload["rollups"]["dev_prod_environment_split_ready_count"] == 12
assert payload["workflow_source_inventory"]["workflow_file_count"] == 13
assert payload["workflow_source_inventory"]["workflow_file_count"] == 14
professional_feature_rollups = payload["workflow_source_inventory"][
"professional_feature_rollups"
]
assert professional_feature_rollups["gitea_ignored_syntax_workflow_count"] == 10
assert professional_feature_rollups["gitea_ignored_syntax_workflow_count"] == 11
assert professional_feature_rollups["otel_workflow_count"] == 3
assert professional_feature_rollups["argocd_gitops_workflow_count"] == 1
assert professional_feature_rollups["notification_or_webhook_workflow_count"] == 9
assert (
professional_feature_rollups["registry_or_package_channel_workflow_count"] == 4
professional_feature_rollups["registry_or_package_channel_workflow_count"] == 5
)
assert professional_feature_rollups["package_release_promotion_workflow_count"] == 1
assert professional_feature_rollups["sbom_or_provenance_workflow_count"] == 1
@@ -203,8 +203,8 @@ def test_gitea_capability_readback_rolls_up_complete_feature_surface() -> None:
assert capability_by_id["wiki_knowledge_base"]["status"] == "source_ready"
assert capability_by_id["gitea_actions_workflows"]["status"] == "verified_ready"
assert capability_by_id["gitea_actions_workflows"]["metrics"] == {
"workflow_source_file_count": 13,
"workflow_contract_count": 13,
"workflow_source_file_count": 14,
"workflow_contract_count": 14,
}
assert capability_by_id["gitea_actions_runners"]["status"] == "verified_ready"
assert (

View File

@@ -1,3 +1,25 @@
## 2026-07-15 — P0 MCP Playwright immutable mirror 與獨立供應鏈 verifier
**完成內容**
- mcp.so 僅保留 discovery URL可執行 bytes 只從 policy allowlist 的 npm registry exact URLs 取得。`@playwright/mcp=0.0.78``playwright` / `playwright-core=1.62.0-alpha-1783623505000` 全部固定 version、SRI SHA-512、SHA-1、npm ECDSA signature、SLSA subject、dependency closure 與 Apache-2.0 license。
- 新增 fail-closed artifact controller拒絕 redirect、非 allowlist host、floating version、dependency/metadata drift、unsafe/duplicate tar entry、已知 OSV vulnerability 與未通過簽章的 artifact產生 deterministic CycloneDX 1.5 SBOM 與 scratch OCI data bundle不執行 package install、MCP、browser 或 container。
- 新增完全不 import controller 的獨立 verifier由 Harbor immutable digest 重新 pull/save image、只把 layer 當資料讀取,限制 file/byte/path/symlink/whiteout要求 exact 8-file bundle再次重算 manifest/SBOM/tarball hash、以 OpenSSL 重驗 npm signature 並重解 SLSA DSSE subject。
- Gitea `mcp-external-artifact-mirror.yaml` 不使用遠端 actionpush、manual 與每週三 pinned revalidation 都先跑 controller/verifier tests、host-pressure gate、Harbor password-stdin、獨立 readback與 logout。receipt 以 ephemeral askpass normal push 到專用 `mcp-artifact-receipts` audit branch不再推 main、取消有效 CD 或保存 credential。
- Gitea run `#5174` 成功controlled run `dce032df-0a9a-476f-940b-e61a94865e1b` 產生 internal digest `sha256:de002c418bbb94fb4609539c4259c39ccb7f8b353f8bac8fbcba9e5742ad79ed`,獨立 verifier 為 `completed_internal_mirror_verified`audit branch commit `9c08ada5c0f15bb6924304af29cd13c8376182ff`
**source/test evidence**
- artifact controller/verifier focused tests `24 passed`MCP control-plane/federation/version-lifecycle `20 passed`
- 新增第 14 條 Gitea workflow 後CD `#5173``2627 passed / 1 failed` 找出 workflow health contract 仍固定 13已同步 workflow health snapshot、secret-name inventory、Gitea capability readback 與 priority work-order count聚焦回歸 `40 passed`secret names 維持 `26`、secret values collected=`false`
- Ruff、py_compile、JSON/YAML parse、freeze/floating-reference guard 與 `git diff --check` 通過。
**尚未完成 / 不誤報**
- 目前只完成 immutable internal mirror 與供應鏈 verifier`deployment_allowed=false``replay_allowed=false``shadow_allowed=false``canary_allowed=false`。尚未實作 registered public-origin replay adapter、compatibility replay、shadow/canary、runtime upgrade、post-verifier 或 rollback execution。
- 外部 catalog / tarball / attestation 未寫 RAG只保留 normalized digest、SBOM 與 supply-chain receipt。未讀 secret value、`.env`、raw session、SQLite/auth未連線或下載 GitHub / Actions / hosted artifact也未使用 `npx -y``@latest``:latest`、force push 或 production route mutation。
- 本筆 inventory drift 修正與 catalog mirror state 尚待最新 main CD/deploy marker/production UI readback不得由 `#5174` mirror success 倒推 AWOOOI production 已部署。
**下一步**
- 先取得包含本修正的 Gitea CD terminal與 production MCP page readback再以 public-only origin allowlist 建立 repo-owned replay adapter要求 compatibility、prompt-injection、latency、accessibility、session/file/download no-write verifier與 rollback receipt 全數通過,才可進第一個 noncritical shadow/canary。
## 2026-07-15 — P0 MCP EwoooC/MOMO durable production federation source closure
**完成內容**

View File

@@ -1,6 +1,6 @@
{
"schema_version": "gitea_workflow_runner_health_v1",
"generated_at": "2026-07-09T23:20:00+08:00",
"generated_at": "2026-07-15T09:54:44+08:00",
"program_status": {
"overall_completion_percent": 100,
"current_priority": "P1",
@@ -21,6 +21,7 @@
".gitea/workflows/deploy-alerts.yaml",
".gitea/workflows/e2e-health.yaml",
".gitea/workflows/harbor-110-local-repair.yaml",
".gitea/workflows/mcp-external-artifact-mirror.yaml",
".gitea/workflows/run-migration.yml",
".gitea/workflows/type-sync-check.yaml",
"docs/evaluations/ai_agent_version_lifecycle_update_proposal_2026-07-10.json",
@@ -32,16 +33,16 @@
"scripts/ops/stop-stale-gitea-actions-jobs.sh"
],
"rollups": {
"total_workflows": 13,
"total_workflows": 14,
"by_workflow_status": {
"manifest_mapped": 13
"manifest_mapped": 14
},
"by_runner_evidence_status": {
"non110_runner_mapped": 10,
"non110_host_runner_mapped": 3
"non110_host_runner_mapped": 4
},
"workflows_with_schedule": 5,
"workflows_with_workflow_dispatch": 13,
"workflows_with_schedule": 6,
"workflows_with_workflow_dispatch": 14,
"workflows_with_notify_bridge": 6,
"workflows_with_actionable_or_failure_quiet_policy": 3,
"workflow_ids_requiring_runner_attestation": [],
@@ -337,6 +338,35 @@
],
"next_action": "維持 no-auto-apply repair guard不得由 API 直接觸發 repair。"
},
{
"workflow_id": "mcp_external_artifact_mirror",
"file_ref": ".gitea/workflows/mcp-external-artifact-mirror.yaml",
"display_name": "MCP External Artifact Mirror",
"scope": "以 exact npm registry artifact、digest、簽章、SLSA subject、SBOM 與 OSV 查核建立 Harbor scratch OCI bundle獨立 verifier 只讀回 layer data不啟動 MCP、browser 或 container。",
"status": "manifest_mapped",
"risk_level": "high",
"triggers": [
"workflow_dispatch",
"schedule",
"push"
],
"schedule_cadence": "每週三 10:13 Asia/Taipei 重驗 pinned artifactcron=13 2 * * 3 UTC",
"runner_labels": [
"awoooi-non110-host"
],
"runner_evidence_status": "non110_host_runner_mapped",
"job_count": 1,
"notification_policy": "durable_receipt_only_no_notify",
"notify_bridge_calls": 0,
"secrets_policy_status": "只引用既有 Harbor 與 Gitea push secret 名稱password-stdinephemeral askpass 且不輸出、不保存值。",
"evidence_refs": [
".gitea/workflows/mcp-external-artifact-mirror.yaml",
"config/mcp/playwright-mcp-artifact-policy.json",
"scripts/security/external_mcp_artifact_controller.py",
"scripts/security/verify_external_mcp_artifact_receipt.py"
],
"next_action": "先完成 audit branch mirror/verifier receipt在 registered public-origin replay adapter 與 rollback receipt 完成前維持 deployment/shadow/canary=false。"
},
{
"workflow_id": "run_migration",
"file_ref": ".gitea/workflows/run-migration.yml",

View File

@@ -301,18 +301,21 @@
"data_boundary": "public_and_test_surfaces",
"deployment_allowed": false,
"version_state": "exact_0.0.78_check_verified",
"digest_state": "upstream_sha512_pinned_internal_mirror_pending",
"sbom_state": "cyclonedx_1.5_check_verified_internal_mirror_pending",
"signature_state": "npm_registry_ecdsa_and_slsa_subject_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",
"rag_policy": "screenshots_and_accessibility_receipts_only",
"blockers": [
"internal_mirror_and_independent_digest_readback_pending",
"registered_public_origin_replay_adapter_missing",
"compatibility_replay_not_executed",
"shadow_canary_verifier_and_rollback_execution_pending"
],
"evidence_refs": [
"config/mcp/playwright-mcp-artifact-policy.json",
"docs/operations/external-mcp-artifacts/playwright-mcp-0.0.78-check.snapshot.json"
"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",
"registry.wooo.work/awoooi/mcp-artifacts/playwright-mcp@sha256:de002c418bbb94fb4609539c4259c39ccb7f8b353f8bac8fbcba9e5742ad79ed"
]
},
{