#!/usr/bin/env python3 """World-class evidence HTML helpers for Review Studio.""" import html from typing import Any from world_class_source_checks import build_source_checklist SCRIPT_INTERFACE = "internal-module" SCRIPT_INTERFACE_REASON = "Imported by render_review_studio.py to render world-class evidence cards." def render_inline_list(items: list[Any], empty_label: str) -> str: if not items: return f"

{html.escape(empty_label)}

" return "" def render_source_checks(entry: dict[str, Any]) -> str: rows = entry.get("source_checklist") if not isinstance(rows, list): rows = build_source_checklist([entry]) if not rows: return "

暂无源证据检查。

" items = [] for row in rows: status = str(row.get("status", "blocked")) items.append( "
  • " f"{html.escape(str(row.get('label', '')))}" f"{html.escape(str(row.get('field', '')))}: {html.escape(str(row.get('actual', '')))} / {html.escape(str(row.get('expected', '')))}" f"{html.escape(str(row.get('next_action', '')))}" "
  • " ) return "" def render_world_class_evidence_entries(ledger: dict[str, Any]) -> str: entries = ledger.get("entries", []) if isinstance(ledger, dict) else [] if not entries: return "

    当前没有 world-class 证据条目。

    " cards = [] for entry in entries: observed = entry.get("observed_state", {}) if isinstance(entry.get("observed_state", {}), dict) else {} observed_summary = "; ".join(f"{key}: {value}" for key, value in observed.items()) submission = entry.get("submission_state", {}) if isinstance(entry.get("submission_state", {}), dict) else {} submission_summary = "; ".join( f"{key}: {value}" for key, value in submission.items() if key in {"status", "path", "attested_real_evidence", "privacy_contract_satisfied"} ) status = str(entry.get("status", "pending")) status_label_text = "已接受" if status == "accepted" else "待补证" cards.append( "
    " f"
    {html.escape(status_label_text)} · {html.escape(str(entry.get('category', '')))}" f"

    {html.escape(str(entry.get('label', entry.get('key', 'evidence'))))}

    " f"

    {html.escape(str(entry.get('objective', '')))}

    " f"
    负责人
    {html.escape(str(entry.get('owner', '')))}
    " f"
    当前状态
    {html.escape(str(entry.get('current', '')))}
    " f"
    下一步
    {html.escape(str(entry.get('next_action', '')))}
    " f"
    观测值
    {html.escape(observed_summary or '无')}
    " f"
    提交态
    {html.escape(submission_summary or 'missing')}
    " "

    执行步骤

    " + render_inline_list(entry.get("runbook", []), "暂无执行步骤。") + "
    " "
    " "

    完成定义

    " + render_inline_list(entry.get("success_checks", []), "暂无完成定义。") + "
    " "

    证据来源

    " + render_inline_list(entry.get("evidence_artifacts", []), "暂无证据来源。") + "
    " "

    隐私约束

    " + render_inline_list(entry.get("privacy_contract", []), "暂无隐私约束。") + "
    " "
    " "

    源证据检查

    " + render_source_checks(entry) + "
    " "
    " ) return "
    " + "".join(cards) + "
    " def render_command_list(commands: dict[str, Any]) -> str: if not commands: return "

    暂无命令。

    " items = [] for label, command in commands.items(): if not command: continue items.append( "
  • " f"{html.escape(str(label))}" f"{html.escape(str(command))}" "
  • " ) return "" if items else "

    暂无命令。

    " def render_world_class_intake_checklist(intake: dict[str, Any]) -> str: items = intake.get("operator_checklist", []) if isinstance(intake, dict) else [] if not items: return "

    当前没有 world-class 证据操作清单。

    " cards = [] for item in items: readiness = str(item.get("readiness", "awaiting-submission")) must_collect = item.get("must_collect", {}) if isinstance(item.get("must_collect", {}), dict) else {} cards.append( "
    " f"
    {html.escape(readiness)} · {html.escape(str(item.get('category', '')))}" f"

    {html.escape(str(item.get('label', item.get('evidence_key', 'evidence'))))}

    " f"

    {html.escape(str(item.get('blocking_reason', '')))}

    " f"
    负责人
    {html.escape(str(item.get('owner', '')))}
    " f"
    模板
    {html.escape(str(item.get('template_path', '')))}
    " f"
    提交
    {html.escape(str(item.get('submission_path', '')))}
    " f"
    下一步
    {html.escape(str(item.get('next_action', '')))}
    " "
    " "

    操作命令

    " + render_command_list(item.get("commands", {}) if isinstance(item.get("commands", {}), dict) else {}) + "
    " "

    收集要求

    " + render_inline_list(must_collect.get("provenance_requirements", []), "暂无来源要求。") + "
    " "

    执行步骤

    " + render_inline_list(must_collect.get("runbook", []), "暂无执行步骤。") + "
    " "

    通过条件

    " + render_inline_list(must_collect.get("success_checks", []), "暂无通过条件。") + "
    " "

    隐私边界

    " + render_inline_list(must_collect.get("privacy_contract", []), "暂无隐私边界。") + "
    " "
    " "
    " ) return "
    " + "".join(cards) + "
    "