Files
ewoooc/services/market_intel/mcp_runtime_promotion.py
OoO 9ada32477c
All checks were successful
CD Pipeline / deploy (push) Successful in 1m6s
[V10.379] add market intel MCP runtime promotion gate
2026-05-21 16:29:21 +08:00

223 lines
8.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""市場情報 MCP runtime promotion gate preview。
本模組只把操作員貼上的 MCP 啟用證據與 runtime smoke 收據合併審核;
不打 health、不開 DB、不保存 payload、不抓外站、不掛 scheduler。
"""
from services.market_intel.mcp_activation_evidence import (
build_mcp_activation_evidence_preview,
)
from services.market_intel.mcp_runtime_smoke_receipt import (
build_mcp_runtime_smoke_receipt_preview,
)
def _sample_promotion_package():
return {
"activation_evidence": build_mcp_activation_evidence_preview()[
"sample_evidence_template"
],
"runtime_receipt": build_mcp_runtime_smoke_receipt_preview()[
"sample_receipt_template"
],
}
def _none_executed(payload, keys):
return all(not payload.get(key) for key in keys)
def build_mcp_runtime_promotion_preview(
*,
activation_evidence=None,
runtime_receipt=None,
phase=None,
):
"""審核 MCP runtime promotion package不執行任何 runtime 動作。"""
activation_evidence = activation_evidence or {}
runtime_receipt = runtime_receipt or {}
activation_payload_received = bool(activation_evidence)
receipt_payload_received = bool(runtime_receipt)
payload_received = activation_payload_received or receipt_payload_received
activation_review = build_mcp_activation_evidence_preview(
evidence=activation_evidence,
phase=phase,
)
receipt_review = build_mcp_runtime_smoke_receipt_preview(
receipt=runtime_receipt,
phase=phase,
)
side_effect_free = bool(
_none_executed(
activation_review,
(
"api_executes_health_check",
"api_executes_docker",
"api_executes_ssh",
"api_opens_database_connection",
"api_writes_database",
"api_uses_external_network",
"database_session_created",
"database_write_executed",
"database_commit_executed",
"external_network_executed",
"scheduler_attached",
"writes_executed",
"would_write_database",
),
)
and _none_executed(
receipt_review,
(
"api_executes_health_check",
"api_executes_docker",
"api_executes_ssh",
"api_opens_database_connection",
"api_writes_database",
"api_uses_external_network",
"database_session_created",
"database_write_executed",
"database_commit_executed",
"external_network_executed",
"scheduler_attached",
"writes_executed",
"would_write_database",
),
)
)
gates = [
{
"key": "activation_evidence_payload_received",
"passed": activation_payload_received,
"label": "已提供 MCP activation evidence payload",
},
{
"key": "activation_evidence_accepted",
"passed": activation_review["activation_evidence_accepted"],
"label": "MCP 啟用證據已通過",
},
{
"key": "runtime_receipt_payload_received",
"passed": receipt_payload_received,
"label": "已提供 runtime smoke receipt payload",
},
{
"key": "runtime_smoke_receipt_accepted",
"passed": receipt_review["runtime_smoke_receipt_accepted"],
"label": "runtime smoke 收據已通過",
},
{
"key": "external_runtime_complete_by_receipts",
"passed": bool(
activation_review["external_mcp_runtime_evidence_complete"]
and receipt_review["external_mcp_runtime_receipt_complete"]
),
"label": "外部 MCP runtime 可由 evidence + receipt 共同驗收",
},
{
"key": "internal_runtime_complete_by_receipts",
"passed": bool(
activation_review["internal_mcp_runtime_evidence_complete"]
and receipt_review["internal_mcp_runtime_receipt_complete"]
),
"label": "內部 MCP telemetry / contract 可由 evidence + receipt 共同驗收",
},
{
"key": "completion_runtime_gap_closed_by_receipts",
"passed": bool(
activation_review["ready_for_runtime_promotion"]
and receipt_review["ready_for_completion_runtime_promotion"]
),
"label": "completion audit 的 runtime 缺口可由本 promotion package 補齊",
},
{
"key": "manual_fetch_gate_ready_for_review",
"passed": bool(
activation_review["ready_for_fetch_gate_review"]
and receipt_review["ready_for_manual_fetch_gate_review"]
),
"label": "可進入人工 fetch gate review但不可自動打開 fetch",
},
{
"key": "promotion_payload_not_persisted",
"passed": bool(
not activation_review["payload_persisted"]
and not activation_review["evidence_persisted"]
and not receipt_review["payload_persisted"]
and not receipt_review["receipt_persisted"]
),
"label": "promotion package 與子 payload 均未保存",
},
{
"key": "promotion_review_side_effect_free",
"passed": side_effect_free,
"label": "本審核不打 health、不開 DB、不抓外站、不掛 scheduler",
},
]
blocked_reasons = [
gate["key"] for gate in gates
if not gate["passed"]
]
accepted = payload_received and not blocked_reasons
return {
"mode": (
"mcp_runtime_promotion_review"
if payload_received
else "mcp_runtime_promotion_preview"
),
"phase": phase,
"promotion_payload_received": payload_received,
"activation_evidence_payload_received": activation_payload_received,
"runtime_receipt_payload_received": receipt_payload_received,
"runtime_promotion_accepted": accepted,
"ready_for_completion_runtime_promotion": accepted,
"ready_for_manual_fetch_gate_review": accepted,
"fetch_gate_still_requires_separate_review": True,
"external_mcp_runtime_promoted_by_receipts": accepted,
"internal_mcp_runtime_promoted_by_receipts": accepted,
"gate_count": len(gates),
"passed_gate_count": sum(1 for gate in gates if gate["passed"]),
"blocked_reasons": blocked_reasons,
"gates": gates,
"activation_summary": {
"accepted": activation_review["activation_evidence_accepted"],
"passed_gate_count": activation_review["passed_gate_count"],
"gate_count": activation_review["gate_count"],
"blocked_reasons": activation_review["blocked_reasons"],
},
"runtime_receipt_summary": {
"accepted": receipt_review["runtime_smoke_receipt_accepted"],
"passed_gate_count": receipt_review["passed_gate_count"],
"gate_count": receipt_review["gate_count"],
"blocked_reasons": receipt_review["blocked_reasons"],
"server_summary": receipt_review["server_summary"],
"telemetry_summary": receipt_review["telemetry_summary"],
},
"mcp_activation_evidence": activation_review,
"mcp_runtime_smoke_receipt": receipt_review,
"sample_promotion_package": _sample_promotion_package(),
"next_operator_steps": [
"若 promotion 通過,回到 MCP 完整度稽核標記 runtime 缺口可由人工收據補齊",
"人工 fetch gate 仍須另行審核,且只能針對公開頁面與限速策略",
"正式 fetch / DB write / scheduler attach 仍需各自獨立 gate不得由本 API 執行",
],
"payload_persisted": False,
"promotion_persisted": False,
"api_executes_health_check": False,
"api_executes_docker": False,
"api_executes_ssh": False,
"api_opens_database_connection": False,
"api_writes_database": False,
"api_uses_external_network": False,
"database_session_created": False,
"database_write_executed": False,
"database_commit_executed": False,
"external_network_executed": False,
"scheduler_attached": False,
"writes_executed": False,
"would_write_database": False,
}