fix(mcp): refresh workflow inventory after mirror lane
This commit is contained in:
@@ -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 供應",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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` 不使用遠端 action;push、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
|
||||
|
||||
**完成內容**:
|
||||
|
||||
@@ -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 artifact;cron=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-stdin/ephemeral 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",
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user