#!/usr/bin/env bash # G1 开放项守门:成本基线信号、OT2 审计、入站媒体 pytest、真机勾选提示。 set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT" export PYTHONPATH=. if [[ -f "$ROOT/.env" ]]; then set -a # shellcheck disable=SC1091 source "$ROOT/.env" 2>/dev/null || true set +a fi echo "=== G1-06 代码守门:inbound media ===" bash scripts/butler-inbound-media-smoke.sh echo "" echo "=== G1-02 成本汇总(7 日)===" python3 -m butler.ops.cost_calibration_cli report --days 7 || true echo "" echo "=== G1/G2 边界观测(G1-02/04 信号)===" python3 - <<'PY' || true import json from butler.ops.boundary_observability import collect_boundary_observations for o in collect_boundary_observations(): if o.gap_id.startswith("G1"): print(o.line(verbose=True)) PY echo "" echo "=== G1-04 OT2 观测窗 ===" python3 - <<'PY' || true import json from butler.ops.boundary_observability import g1_04_observation_window_status w = g1_04_observation_window_status() print( f" 窗 {w['window_start']}→{w['window_end']} " f"剩 {w['days_remaining']}d · 窗内 {w['feedback_in_window']} 条 " f"(B9 {w.get('feedback_evidence_b9_eval', 0)} / 生产 {w.get('feedback_evidence_production', 0)})" ) if w.get("ot2_closure_ready"): print(" ✅ ot2_closure_ready — 可结案(含生产硬反馈)") elif w.get("pipeline_closure_ready") and w.get("feedback_b9_eval_only"): print(" ⚠️ 仅 B9 测评 — 管线结案: closure-apply.sh --pipeline-only") print(json.dumps(w, ensure_ascii=False, indent=2)) PY echo "" echo "=== G1 真机(须主公微信操作)===" echo " G1-08:已搁置(灵文试点;非平台 G1)" echo " G1-06:✅ 2026-06-10 真机已验(M-img/M-voice);复测可按需重跑 inbound smoke" echo "" echo "=== G1-02 录入账单基线(替换为控制台实际值)===" echo ' butler cost set-baseline --usd --input-tokens --output-tokens --note "控制台账期"' echo "" echo "勾选后更新 projects/LingWen1/docs/pilot-log.md §G1 清单执行"