---
belongs_to:
- "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]"
---
# 🌙 铸渊指令|天眼夜间自动修复引擎(下篇)—— PR·仪表盘·人类审阅·注册
---
---
## 一、Phase E — 自动创建 Pull Request
### 1.1 触发条件
Phase D 天眼审核 **全部通过**(H1-H9 = PASS)。
### 1.2 PR 创建规范
```
Step 1: 创建 Pull Request
→ GitHub API: POST /repos/{owner}/{repo}/pulls
→ 参数:
title: "🌙 [AUTO-FIX] {YYYY-MM-DD} 天眼夜间自动修复 ({N}个修复)"
head: "fix/auto-repair-{YYYYMMDD}-{序号}"
base: "main"
body: 见下方 PR Body 模板
labels: ["auto-fix", "tianyan-v3"]
Step 2: 添加 PR 评论(修复摘要)
→ 对每个修复项生成一条评论
→ 包含:原始错误 + 根因分析 + 修复方案 + 风险等级
Step 3: 设置 PR 状态标签
→ 全部 low risk → 标签: ✅ safe-to-merge
→ 含 medium risk → 标签: ⚠️ review-carefully
→ 含 high risk → 不应出现(Phase B 已过滤)
```
### 1.3 PR Body 模板
```markdown
## 🌙 天眼夜间自动修复引擎 v3.0
**扫描时间:** {scan_time}
**修复数量:** {fix_count} 个
**风险等级:** {overall_risk}
**天眼审核:** ✅ H1-H9 全部通过
### 修复清单
| # | Workflow | 错误类型 | 根因 | 风险 | 文件 |
|---|----------|----------|------|------|------|
| 1 | sync-to-drive.yml | rclone_oauth_parse | shell拼接JSON不完整 | 🟢 low | sync-to-drive.yml |
| 2 | ... | ... | ... | ... | ... |
### 天眼审核结果
- [x] H1 Secrets安全
- [x] H2 文件完整性
- [x] H3 依赖安全
- [x] H4 权限最小化
- [x] H5 天眼自保护
- [x] H6 变更范围
- [x] H7 Secrets引用完整性
- [x] H8 注释规范
- [x] H9 无残留调试代码
---
> 🤖 此 PR 由铸渊夜间修复引擎自动创建
> 📋 指令编号: ZY-TIANYAN-AUTOFIX-2026-0324-001
> ⏰ 请冰朔在晨间审阅后合并
```
---
## 二、Phase F — 仪表盘更新机制
### 2.1 仪表盘位置
在主仓库 `README.md` 或独立文件 `DASHBOARD.md` 中维护。
### 2.2 仪表盘结构设计
```markdown
## 🌙 天眼夜间修复引擎 · 仪表盘
### 系统状态
| 指标 | 值 |
|------|----|
| 引擎版本 | v3.0 |
| 上次扫描 | 2026-03-24 23:00 CST |
| 扫描结果 | ⚠️ 发现 3 个错误 |
| 自动修复 | ✅ 2 个已修复 |
| 需人工处理 | 🔴 1 个等待指令 |
| 待合并 PR | 🟡 PR #42 |
### 最近7天修复历史
| 日期 | 扫描 | 发现 | 自动修复 | 人工处理 | PR |
|------|------|------|----------|----------|----|
| 03-24 | ✅ | 3 | 2 | 1 | #42 |
| 03-23 | ✅ | 0 | - | - | - |
| 03-22 | ✅ | 1 | 1 | 0 | #41 ✅ |
| ... | ... | ... | ... | ... | ... |
### 待处理事项
🔴 **需人工处理:**
- [ ] sync-persona-studio.yml: permission_denied (CROSS_REPO_TOKEN 未配置)
🟡 **待合并 PR:**
- [ ] PR #42: 天眼夜间修复 2026-03-24 (2个修复,低风险)
```
### 2.3 仪表盘更新逻辑
```
场景 A: 扫描无异常
→ 更新「上次扫描」时间
→ 更新「扫描结果」为 ✅ 今日无异常
→ 清空「待合并 PR」(如果前一天的已被合并)
→ 追加当日记录到7天历史
场景 B: 自动修复成功
→ 更新扫描结果 + 修复数量
→ 更新「待合并 PR」为新 PR 链接
→ 追加当日记录
场景 C: 自动修复失败
→ 更新「需人工处理」计数
→ 在「待处理事项」中添加具体错误描述
→ 追加当日记录(标记修复失败)
场景 D: 部分成功部分失败
→ 组合 B + C 的更新逻辑
场景 E: 人类合并了 PR
→ 下次扫描时检测已合并的 PR
→ 从「待合并 PR」中移除
→ 更新7天历史中对应日期的 PR 状态为 ✅
```
### 2.4 仪表盘更新 Workflow 片段
```yaml
# ========================================
# Phase E+F: 创建 PR + 更新仪表盘
# ========================================
create-pr-and-dashboard:
needs: analyze-and-repair
if: needs.analyze-and-repair.outputs.pr_needed == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: main
- name: "📦 Phase E — 创建 Pull Request"
id: create_pr
env:
GH_TOKEN: $ secrets.DEPLOY_GITHUB_TOKEN
BRANCH: $ needs.analyze-and-repair.outputs.repair_branch
SUMMARY: $ needs.analyze-and-repair.outputs.repair_summary
run: |
echo "[天眼 v3.0] Phase E — 创建 Pull Request"
PR_TITLE="🌙 [AUTO-FIX] $(date +%Y-%m-%d) 天眼夜间自动修复"
PR_URL=$(gh pr create \
--base main \
--head "$BRANCH" \
--title "$PR_TITLE" \
--body "$SUMMARY" \
--label "auto-fix,tianyan-v3")
echo "pr_url=$PR_URL" >> $GITHUB_OUTPUT
echo "✅ PR 已创建: $PR_URL"
- name: "📊 Phase F — 更新仪表盘"
env:
GH_TOKEN: $ secrets.DEPLOY_GITHUB_TOKEN
PR_URL: $ steps.create_pr.outputs.pr_url
run: |
echo "[天眼 v3.0] Phase F — 更新仪表盘"
DATE=$(date +%Y-%m-%d)
# 铸渊实现:
# 1. 读取 DASHBOARD.md
# 2. 更新系统状态表
# 3. 追加当日历史记录
# 4. 更新待合并 PR
# 5. 提交到 main 分支
git add DASHBOARD.md
git commit -m "[DASHBOARD] 更新天眼仪表盘 $DATE"
git push origin main
# ========================================
# 无错误时的仪表盘更新
# ========================================
dashboard-no-errors:
needs: nightly-scan
if: needs.nightly-scan.outputs.has_errors == 'false'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: "✅ 更新仪表盘 — 今日无异常"
env:
GH_TOKEN: $ secrets.DEPLOY_GITHUB_TOKEN
run: |
DATE=$(date +%Y-%m-%d)
echo "[天眼 v3.0] 今日无异常,更新仪表盘"
# 铸渊实现:
# 1. 更新扫描时间和状态
# 2. 检查前一天的 PR 是否已合并
# 3. 追加当日记录(无异常)
git add DASHBOARD.md
git commit -m "[DASHBOARD] 今日无异常 $DATE" || true
git push origin main || true
```
---
## 三、Phase G — 人类晨间审阅协议
### 3.1 冰朔操作流程
```
每天早上(冰朔自然醒来后):
① 打开仪表盘 DASHBOARD.md
→ 查看「系统状态」区域
→ 如果「待合并 PR」为空 → 不需要操作,结束
② 如果有待合并 PR:
→ 点击 PR 链接进入 GitHub
→ 查看修复清单和天眼审核结果
→ 可选:查看每个 commit 的 diff
③ 决策:
→ 确认修复合理 → 点击 Merge → 完成
→ 发现问题 → 在 PR 中留言 → 铸渊下次夜间修复时读取反馈
→ 不确定 → 暂不合并 → 仪表盘持续显示待合并状态
④ 如果有「需人工处理」事项:
→ 阅读具体错误描述
→ 决定是否需要手动下指令给铸渊
→ 或者等待下次夜间扫描(如果是临时性问题可能已自愈)
```
### 3.2 PR 合并后自动清理
```
当 PR 被合并到 main 后:
→ 自动删除修复分支 fix/auto-repair-*
→ 下次夜间扫描时更新仪表盘历史记录
→ 如果修复的 Workflow 再次运行成功 → 在仪表盘标记 ✅ 已确认修复
```
---
## 四、回滚安全网
### 4.1 自动回滚触发条件
```
场景 1: PR 合并后,原本正常的 Workflow 开始报错
→ 下次夜间扫描检测到「修复引入新错误」
→ 自动创建 revert PR
→ 仪表盘标记 🔴 回滚告警
场景 2: 修复分支上的预审核未通过
→ Phase C 已处理:回退 commit
场景 3: 天眼审核未通过 + 2轮重试失败
→ Phase D 已处理:删除修复分支,记录仪表盘
```
### 4.2 回滚检测逻辑
```
在 Phase A 扫描中增加以下检测:
Step Extra: 检查「修复后回归」
→ 获取最近 48 小时内合并的 auto-fix PR 列表
→ 对每个 PR 涉及的 Workflow:
→ 检查合并后的运行记录
→ 如果合并前正常、合并后开始报错 → 标记为「修复引入回归」
→ 自动创建 revert commit 的 PR
→ PR 标题: "🔴 [REVERT] {原PR标题} — 修复引入回归"
→ 仪表盘标记回滚告警
```
---
## 五、错误去重与累积策略
### 5.1 去重规则
```
同一个 Workflow + 同一个 error_type 的错误视为同一个问题:
→ 首次出现:标记 first_seen 日期
→ 后续出现:增加 occurrence_count
→ 只在首次出现时尝试自动修复
→ 如果首次修复失败,后续出现不再重复尝试
→ 除非:人类手动在仪表盘标记「允许重试」
```
### 5.2 累积阈值告警
```
同一错误连续出现 3 天以上:
→ 仪表盘标记 🔴 持续性错误
→ 在待处理事项中升级优先级
同一错误连续出现 7 天以上:
→ 仪表盘标记 🚨 紧急告警
→ 如果配置了通知渠道 → 发送通知给冰朔
```
---
## 六、CRON 调度总览
与现有系统 CRON 的完整协调:
| **时间 (CST)** | **任务** | **Workflow** | **类型** |
| --- | --- | --- | --- |
| 04:00-04:10 | 每日微休眠 | 系统内置 | 休眠 |
| 周一 10:00 | Token主刷新A | renew-gdrive-tokens.yml | 生命线 |
| 12:15 每天 | Token安全网 | check-token-health.yml | 生命线 |
| 周四 10:00 | Token主刷新B | renew-gdrive-tokens.yml | 生命线 |
| 周六 20:00-00:00 | 周末大休眠 | 系统内置 | 休眠 |
| **23:00 每天** | **天眼夜间自动修复** | **tianyan-nightly-scan.yml** | **生命线** ⭐ NEW |
---
## 七、Workflow 注册表条目
| **编号** | **Workflow** | **用途** | **触发** | **Secrets** |
| --- | --- | --- | --- | --- |
| AG-ZY-087 | tianyan-nightly-scan.yml | 天眼夜间自动修复引擎 v3.0 主流程 | CRON 每天 23:00 CST + 手动 | DEPLOY_GITHUB_TOKEN, GEMINI_API_KEY |
---
## 八、文件清单
铸渊需要创建/修改的文件:
| **#** | **文件** | **操作** | **说明** |
| --- | --- | --- | --- |
| 1 | `.github/workflows/tianyan-nightly-scan.yml` | 🆕 新建 | 主 Workflow 文件(Phase A-F) |
| 2 | `.github/scripts/tianyan-analyze.js` | 🆕 新建 | Phase B 报错分析脚本(调用 Gemini) |
| 3 | `.github/scripts/tianyan-repair.js` | 🆕 新建 | Phase C 自动修复脚本(调用 Gemini) |
| 4 | `.github/scripts/tianyan-review.js` | 🆕 新建 | Phase D 天眼审核脚本(H1-H9) |
| 5 | `DASHBOARD.md` | 🆕 新建 | 天眼修复引擎仪表盘 |
| 6 | `.github/tianyan-config.json` | 🆕 新建 | 天眼配置文件(错误分类规则、安全护栏参数) |
---
## 九、天眼配置文件
**文件:** `.github/tianyan-config.json`
```json
{
"version": "3.0",
"engine": "tianyan-nightly-autofix",
"schedule": {
"scan_time_utc": "15:00",
"scan_time_cst": "23:00",
"timezone": "Asia/Shanghai"
},
"safety": {
"max_files_per_repair": 5,
"max_lines_per_file": 50,
"max_retry_rounds": 2,
"max_total_changed_lines": 200,
"protected_patterns": [
"tianyan-*.yml",
"CODEOWNERS",
".github/FUNDING.yml"
],
"forbidden_operations": [
"create_file",
"delete_file",
"modify_secrets_ref",
"modify_protected_file",
"push_to_main"
]
},
"error_classification": {
"auto_fixable": [
"config_parse",
"rclone_oauth_parse",
"script_error"
],
"partial_fixable": [
"token_expired"
],
"manual_only": [
"network_timeout",
"permission_denied",
"unknown"
]
},
"gemini": {
"model": "gemini-2.0-flash",
"temperature": 0.1,
"max_output_tokens": 4096,
"response_format": "json"
},
"dashboard": {
"file": "DASHBOARD.md",
"history_days": 7,
"alert_thresholds": {
"persistent_error_days": 3,
"urgent_alert_days": 7
}
},
"weekend_mode": {
"enabled": true,
"saturday_hibernation": "20:00-00:00",
"saturday_scan_only": true,
"skip_repair_on_saturday": true
}
}
```
---
## 十、执行回执模板
---
## 十一、验收标准
---