--- 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 } } ``` --- ## 十、执行回执模板 --- ## 十一、验收标准 ---