shuangyan-notebook/第五域 · Fifth Domain/⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议/🔧 铸渊紧急指令|README md 恢复 + PR#112 workflow 修复 + 根目录保护 110859b9f77d4834b9305e556d40e46f.md
Guanghu Domestic Migration a27e87cb99 chore: import sanitized domestic snapshot for REPO-007
Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc

[SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
2026-07-17 15:59:55 +08:00

282 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

---
belongs_to:
- "[[INDEX · 铸渊·协作指令GitHub ↔ Notion 桥接协议]]"
---
# 🔧 铸渊紧急指令README.md 恢复 + PR#112 workflow 修复 + 根目录保护机制2026-03-15·霜砚签发
<aside>
🚨
**签发人**霜砚Notion执行AI× 冰朔TCS-0002∞
**执行人**铸渊GitHub守护层
**签发时间**2026-03-15T21:42+08:00
**优先级**P0 · 立即执行
**背景**PR #112之之·钉钉模块merge 进 main 后,两个问题并发:
① 根目录 `README.md` 被之之的钉钉项目 README 覆盖,原主页公告结构全部丢失
② 四条已有 workflow 被连带破坏syslog-auto-pipeline / syslog-issue-pipeline / pm2-server-diagnose / daily-maintenance
</aside>
---
# 任务一:[README.md](http://README.md) 立即恢复P0
## 问题根因
之之的 PR #112 在分支根目录包含了一个属于钉钉项目的 `README.md`merge 后覆盖了铸渊维护的主仓库首页。
`服务器部署适配协议 v1.0` 已约束了服务器目录的越界,但**未覆盖 GitHub 仓库根目录文件保护**——本次修复同步补上。
## 恢复目标结构
原主 README 包含以下五个区块(铸渊按记忆/git history恢复
```markdown
# 🌊 HoloLake · 光湖纪元
<!-- 区块1🏛 系统简介 -->
<!-- 铸渊从 dev-status.json + 仓库概览自动生成 -->
<!-- 区块2📢 冰朔公告栏 -->
<!-- 由「更新系统公告区」workflow 自动更新 -->
<!-- 铸渊不得覆盖此区块,只追加 -->
<!-- 区块3👥 开发者公告栏(协作者动态)-->
<!-- 由「更新系统公告区」workflow 追加式更新2026-03-14协议只追加不覆盖-->
<!-- 区块4🚀 协作者开发体验入口 -->
<!-- persona-studio 入口 + 各开发者沙盒直达链接 -->
<!-- 区块5📥 开发者入口SYSLOG自助提交-->
<!-- 系统日志自动提交通道 -->
```
## 执行步骤
```jsx
Step 1 git log README.md 被覆盖前的最后一个正常 commit
git log --oneline --follow README.md
找到 PR #112 merge 之前的 commit SHA
Step 2 git history 恢复原 README 内容
git show <上一个正常SHA>:README.md > /tmp/README_backup.md
对比当前 README确认哪些内容被替换了
Step 3恢复原结构 + 保留之之钉钉内容的正确归位
原主 README 恢复到根目录 README.md
之之的钉钉 README 应在dingtalk-bot/README.md DEV-004/README.md
不是根目录
Step 4commit push
commit message: "fix: restore main README.md after PR#112 overwrite"
```
---
# 任务二:修复四条被破坏的 workflowP0
## 受损 workflow 清单
| Workflow | 编号 | 触发 commit |
| --- | --- | --- |
| syslog-auto-pipeline.yml | #130 | 74baf7f (PR#112 merge) |
| syslog-issue-pipeline.yml | #125 | 74baf7f |
| pm2-server-diagnose.yml | #93 | 74baf7f |
| daily-maintenance.yml | #75 | 74baf7f |
## 排查方法
```jsx
Step 1逐条打开失败的 run 找到第一个红叉的 step 记录报错信息
Step 2常见原因对照
A. 文件路径找不到 PR#112 可能移动/删除了被这些 workflow 引用的脚本
检查workflow run: node scripts/xxx.js 的脚本是否还存在
B. 环境变量/Secret 名称不匹配 PR#112 可能新增了同名但不同前缀的变量
检查workflow 里用的 $ secrets.XXX 是否和 repo Secrets 一致
C. workflow 文件本身被 PR#112 修改 PR#112 可能改了这些 .yml 文件
检查git diff HEAD~1 HEAD -- .github/workflows/ 看哪些 yml 被改了
Step 3分类修复
· 路径问题 恢复脚本文件 or 修正路径引用
· Secret 名称问题 统一变量名告知妈妈补充 Secret
· yml 文件被改坏 git history 恢复
```
---
# 任务三:建立根目录保护机制(防止再次被覆盖)
## 方案CODEOWNERS + 受保护文件清单
```jsx
Step 1在仓库根目录创建 / 更新 .github/CODEOWNERS
# 根目录受保护文件 · 修改需要 @qinfendebingshuo 审批
README.md @qinfendebingshuo
.github/workflows/ @qinfendebingshuo
.github/copilot-instructions.md @qinfendebingshuo
Step 2 GitHub 仓库 Settings Branches main 分支保护规则中
启用 "Require review from Code Owners"
这样任何人修改 README.md PR必须经过 @qinfendebingshuo 审批才能 merge
此步需妈妈在 GitHub UI 手动操作
Step 3 .github/copilot-instructions.md 中追加规则
"根目录 README.md 由铸渊的「更新系统公告区」workflow 维护"
"开发者的模块 README 必须放在各自的模块子目录下"
"不得在 PR 中将模块 README 推送到根目录"
```
---
# 验收标准
```jsx
根目录 README.md 恢复五区块结构系统简介+冰朔公告+开发者公告+体验入口+SYSLOG入口
之之的钉钉 README 归位到正确子目录
四条失败 workflow 全部恢复绿色
.github/CODEOWNERS 已创建README.md 受保护
更新系统公告区 workflow 下次自动运行时能正确更新公告内容
```
---
# 需要妈妈配合的
```jsx
GitHub Settings Branches main 保护规则 启用 "Require review from Code Owners"
铸渊无法自己操作 repo Settings
如果 workflow 报错显示某个 Secret 名称缺失铸渊会在回执里告知妈妈需要补哪个
```
---
# 铸渊回执格式
```jsx
铸渊回执 · README恢复 + PR#112 修复
时间XXXX
README 恢复
· 被覆盖前最后正常 commit<SHA>
· 恢复状态:✅已恢复 / 失败原因
· 之之钉钉 README 归位<新路径>
四条 workflow 修复
· syslog-auto-pipeline原因=XXX 已修/需妈妈操作
· syslog-issue-pipeline原因=XXX 已修/需妈妈操作
· pm2-server-diagnose原因=XXX 已修/需妈妈操作
· daily-maintenance原因=XXX 已修/需妈妈操作
CODEOWNERS 保护
· .github/CODEOWNERS:✅已创建
· 需妈妈在 Settings 启用 Code Owner Review
需要妈妈操作
1. ...
```
---
# 任务四补「元看门狗」workflow防止巡检被静默打断
## 问题根因分析
PR #112 同时打断了 `daily-maintenance.yml`(每日自检)和 `pm2-server-diagnose.yml`(服务器诊断)——铸渊的眼睛和耳朵一起断了,核心大脑唤醒后看不到任何异常,无法上报。
**现有架构的盲点**
```
铸渊核心大脑唤醒 → 触发巡检 workflow → 发现问题 → 上报
如果这里断了 → 全链路静默失败,无任何告警
```
## 元看门狗方案
```yaml
# 文件:.github/workflows/meta-watchdog.yml
# 定位:极简独立 workflow只监控「巡检本身是否在跑」
# 原则:不依赖任何共享脚本,不调用任何外部 API只读 workflow 运行状态
name: 🐕 元看门狗 · 巡检健康监控
on:
schedule:
- cron: '0 */6 * * *' # 每6小时一次北京时间 2/8/14/20点
workflow_dispatch:
jobs:
check-patrol-health:
runs-on: ubuntu-latest
steps:
- name: 检查 daily-maintenance 最近运行状态
env:
GH_TOKEN: $ secrets.GITHUB_TOKEN
NOTION_TOKEN: $ secrets.NOTION_API_TOKEN
run: |
# 用 GitHub API 查 daily-maintenance 最近一次运行时间
LAST_RUN=$(curl -s \
-H "Authorization: Bearer $GH_TOKEN" \
"https://api.github.com/repos/$ github.repository /actions/workflows/daily-maintenance.yml/runs?per_page=1" \
| node -e "const d=require('fs').readFileSync('/dev/stdin','utf8'); \
const r=JSON.parse(d).workflow_runs[0]; \
console.log(r ? r.updated_at : 'NEVER')")
echo "daily-maintenance 最后运行:$LAST_RUN"
# 计算距上次运行超过 26 小时则告警
node -e "
const last = new Date('$LAST_RUN');
const now = new Date();
const hours = (now - last) / 3600000;
if (isNaN(hours) || hours > 26) {
console.log('ALERT: daily-maintenance 已超 ' + Math.round(hours) + 'h 未运行');
process.exit(1);
} else {
console.log('OK: 距上次运行 ' + Math.round(hours) + 'h正常');
}
"
- name: 写入 Notion 告警(仅在失败时触发)
if: failure()
env:
NOTION_TOKEN: $ secrets.NOTION_API_TOKEN
run: |
curl -s -X POST https://api.notion.com/v1/pages \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
-d "{
\"parent\": {\"database_id\": \"f983bdc24b654888913ca254160bff33\"},
\"properties\": {
\"标题\": {\"title\": [{\"text\": {\"content\": \"⚠️ 元看门狗告警daily-maintenance 巡检中断\"}}]},
\"处理状态\": {\"status\": {\"name\": \"待处理\"}}
}
}"
```
## 核心设计原则
- **极简**:不依赖任何外部脚本,只用 curl + 内联 node 代码PR 无法意外破坏它
- **独立**:与被监控的 workflow 完全分离,一个挂了不影响另一个
- **写 Notion**:告警直接写入霜砚可读的 Notion 数据库,冰朔也能看到
- **meta-watchdog 本身的健康**它如果也挂了GitHub 会在 Actions 页面显示红叉(这个 workflow 本身极简,几乎不可能被普通 PR 打断)
---
<aside>
🏗️
**关联协议**:服务器部署适配协议 v1.0 已约束服务器目录越界。本次同步补上 **GitHub 仓库根目录保护 + 元看门狗**——三层防护合并生效,形成完整的越界隔离 + 自监控体系。
</aside>