Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
696 lines
22 KiB
Markdown
696 lines
22 KiB
Markdown
---
|
||
belongs_to:
|
||
- "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]"
|
||
---
|
||
# 🚨 铸渊指令|智能门禁 + 全仓库 Workflow 审查 + 失败任务重推 · 分支保护已取消 · 权限已全部部署 · 今日必须完成(2026-03-16·霜砚签发·冰朔授权)
|
||
|
||
<aside>
|
||
🚨
|
||
|
||
**P0 · 今日必须完成 · 冰朔亲自授权签发**
|
||
|
||
签发人:霜砚(Notion执行体)· 冰朔(TCS-0002∞)授权
|
||
|
||
签发时间:2026-03-16 12:30 北京时间
|
||
|
||
执行者:铸渊(ICE-GL-ZY001)
|
||
|
||
**读到就做,按顺序执行,不等人。**
|
||
|
||
</aside>
|
||
|
||
---
|
||
|
||
## 零、环境变更通知(妈妈已处理·铸渊确认)
|
||
|
||
<aside>
|
||
✅
|
||
|
||
**以下变更妈妈已经完成,铸渊确认后继续执行:**
|
||
|
||
</aside>
|
||
|
||
### ① 分支保护规则已取消
|
||
|
||
妈妈已经在 GitHub Settings → Branches → main 分支保护规则中,**取消了「合并前需要提交拉取请求」和「需要审批」**。
|
||
|
||
现在的状态:
|
||
|
||
- ✅ 所有 workflow 可以正常 `git push` 到 main
|
||
- ✅ 所有 workflow 可以正常合并 PR
|
||
- ✅ 开发者也可以直接 push(**但这正是本指令要用智能门禁来管控的**)
|
||
|
||
**铸渊不再需要走 `peter-evans/create-pull-request` 模式。** 之前 PR `copilot/修复开发状态同步问题` 中的改动可以保留也可以回退,因为现在 `git push` 已经不被拦截了。但铸渊自己选择哪种方式都行,只要能正常运行。
|
||
|
||
### ② Notion 数据库权限已全部部署
|
||
|
||
妈妈已经把 **所有 Integration**(HoloLake-v3、HoloLake Robot、铸渊信号桥、HoloLake、曜冥纪元-HoloLake)**全部添加到了所有数据库的连接中**。
|
||
|
||
铸渊之前在修复报告中提到的数据库:
|
||
|
||
- **`dc675e91-5529-4e47-9fe4-13de3ec6a334`** = **开发者动态画像库**(🧬 开发者动态画像库)
|
||
- 这个数据库的权限妈妈已经配好了
|
||
|
||
**铸渊需要做的**:
|
||
|
||
1. 用你实际使用的 `NOTION_TOKEN` 重新测试一遍 **所有** 你需要读写的 Notion 数据库
|
||
2. 逐个验证连通性:
|
||
- 开发者动态画像库(`dc675e91-5529-4e47-9fe4-13de3ec6a334`)
|
||
- 霜砚工单(`f983bdc2-4b65-4888-913c-a25416xxxxxx`)
|
||
- SYSLOG 数据库(`330ab175-07d5-42c9-bbb9-6d0749b41197`)
|
||
- 执行层状态(Execution Status)
|
||
- 其他你需要写入的数据库
|
||
3. 如果任何一个还是报权限错 → 记录具体的 database_id + 错误信息 → 通知妈妈
|
||
|
||
---
|
||
|
||
## 一、Step 0 · 唤醒核心大脑
|
||
|
||
```bash
|
||
# ━━━ 铸渊唤醒核心大脑 ━━━
|
||
# 这是所有操作的前提。不唤醒大脑,不做任何事。
|
||
|
||
echo "🧠 铸渊核心大脑唤醒中..."
|
||
|
||
# 读取所有核心大脑文件
|
||
ls -la .github/persona-brain/
|
||
|
||
# 必须存在且完整:
|
||
# memory.json — 铸渊记忆
|
||
# routing-map.json — 路由映射表
|
||
# copilot-instructions.md — Copilot 指令集
|
||
# dev-status.json — 全员开发进度
|
||
# kb/knowledge-base.json — 知识库
|
||
|
||
# 验证每个文件可解析
|
||
for f in memory.json routing-map.json dev-status.json; do
|
||
echo "检查: .github/persona-brain/$f"
|
||
python3 -c "import json; json.load(open('.github/persona-brain/$f'))" 2>&1 \
|
||
&& echo " ✅ 完整" || echo " ❌ 损坏或缺失"
|
||
done
|
||
|
||
echo "🧠 核心大脑唤醒完成。以下所有操作基于全局视角执行。"
|
||
```
|
||
|
||
**唤醒后铸渊必须具备的全局认知**:
|
||
|
||
- 仓库中有哪些 workflow(全部列出)
|
||
- 每个 workflow 的触发条件、职责、最近运行状态
|
||
- 开发者 → 模块路径映射表
|
||
- 所有 Notion 数据库的连接状态
|
||
|
||
---
|
||
|
||
## 二、Step 1 · 全仓库 Workflow 审查
|
||
|
||
<aside>
|
||
🔍
|
||
|
||
**铸渊必须把仓库里所有 workflow 过一遍。目标:全部能跑、互不干扰。**
|
||
|
||
</aside>
|
||
|
||
```bash
|
||
# ━━━ 列出仓库中所有 workflow ━━━
|
||
echo "📋 全仓库 Workflow 清单:"
|
||
ls -la .github/workflows/*.yml
|
||
|
||
# ━━━ 对每个 workflow 执行检查 ━━━
|
||
for f in .github/workflows/*.yml; do
|
||
echo "\n━━━ 检查: $f ━━━"
|
||
|
||
# 1. YAML 语法检查
|
||
python3 -c "import yaml; yaml.safe_load(open('$f'))" 2>&1 \
|
||
&& echo " ✅ 语法正确" || echo " ❌ 语法错误"
|
||
|
||
# 2. 检查触发条件
|
||
grep -A5 "^on:" "$f" | head -10
|
||
|
||
# 3. 检查是否有 git push 操作(可能被旧分支保护拦截过)
|
||
grep -n "git push" "$f" && echo " ℹ️ 包含 git push(现在已放开,可正常运行)"
|
||
|
||
# 4. 检查是否引用了不存在的 Secret
|
||
grep -oP 'secrets\.\K[A-Z_]+' "$f" | sort -u
|
||
done
|
||
|
||
# ━━━ 查看最近 30 次 workflow 运行记录 ━━━
|
||
gh run list --limit 30
|
||
|
||
# ━━━ 重点排查今天失败的 run ━━━
|
||
gh run list --status failure --limit 20
|
||
```
|
||
|
||
### 审查清单
|
||
|
||
铸渊对每个 workflow 输出一行结论:
|
||
|
||
| Workflow 文件 | 职责 | 语法 | 触发条件 | 最近运行 | 状态 |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| server-patrol.yml | 服务器巡检 | ✅/❌ | cron 08:00+20:00 | 时间 | ✅/❌ |
|
||
| daily-community-report.yml | 社区日报 | ✅/❌ | cron | 时间 | ✅/❌ |
|
||
| zhuyuan-daily-selfcheck.yml | 每日自检 | ✅/❌ | cron 08:00 | 时间 | ✅/❌ |
|
||
| deploy-to-server.yml | CD部署 | ✅/❌ | push main | 时间 | ✅/❌ |
|
||
| process-syslog.yml | SYSLOG处理 | ✅/❌ | push syslog-inbox/ | 时间 | ✅/❌ |
|
||
| distribute-broadcasts.yml | 广播分发 | ✅/❌ | push broadcasts-outbox/ | 时间 | ✅/❌ |
|
||
| meta-watchdog.yml | 根目录保护 | ✅/❌ | push | 时间 | ✅/❌ |
|
||
| …(全部列出) | | | | | |
|
||
|
||
**如果有 workflow 语法错误或无法运行 → 立即修复 → 不等人。**
|
||
|
||
---
|
||
|
||
## 三、Step 2 · 开发「铸渊·智能门禁」workflow
|
||
|
||
<aside>
|
||
🚨
|
||
|
||
**这是本指令的核心任务。今天必须完成并上线。**
|
||
|
||
</aside>
|
||
|
||
### 设计理念
|
||
|
||
```
|
||
开发者 push 代码到 main
|
||
↓
|
||
🚨 铸渊·智能门禁 自动触发
|
||
↓
|
||
① 识别:谁推的?推了哪些文件?
|
||
↓
|
||
② 判断:文件路径是否在该开发者的合法目录内?
|
||
├── ✅ 路径正确 → 放行(什么都不做,后续 CD 正常部署)
|
||
├── ⚠️ 路径错误但可修复 → 自动移到正确目录 → commit + push
|
||
└── ❌ 无法修复(改了系统文件/改了别人目录/冲突) → revert + 通知
|
||
↓
|
||
③ 记录:所有门禁事件写入核心大脑 memory.json
|
||
```
|
||
|
||
### 核心规则
|
||
|
||
**开发者权限矩阵**(冰朔 2026-03-16 13:08 确认·从 GitHub Collaborators 截图提取):
|
||
|
||
<aside>
|
||
✅
|
||
|
||
**以下 GitHub 用户名已由妈妈亲自确认,铸渊直接写入 `gate-guard-config.json`,不需要再问。**
|
||
|
||
</aside>
|
||
|
||
| GitHub Username | DEV编号 | 昵称 | 允许修改的路径 |
|
||
| --- | --- | --- | --- |
|
||
| `夜夜光湖` | DEV-001 | 页页 | `dev/DEV-001/`, `backend/`, `src/` |
|
||
| `建培` | DEV-002 | 肥猫 | `dev/DEV-002/`, `frontend/`, `persona-selector/`, `chat-bubble/` |
|
||
| `六寻寻7-max` | DEV-003 | 燕樊 | `dev/DEV-003/`, `settings/`, `cloud-drive/` |
|
||
| `zhizhi200271` | DEV-004 | 之之 | `dev/DEV-004/`, `dingtalk-bot/` |
|
||
| `stbr-0709` | DEV-005 | 小草莓 | `dev/DEV-005/`, `status-board/`, `cost-control/` |
|
||
| `华尔华` | DEV-009 | 花尔 | `dev/DEV-009/`, `user-center/` |
|
||
| `juzi0412` | DEV-010 | 桔子 | `dev/DEV-010/`, `ticket-system/`, `data-stats/`, `dynamic-comic/` |
|
||
| (未加入仓库) | DEV-011 | 匆匆那年 | `dev/DEV-011/`, `writing-workspace/` |
|
||
| `文卓熙` | DEV-012 | Awen | `dev/DEV-012/`, `notification-center/`, `notification/` |
|
||
| (未加入仓库) | DEV-013 | 小兴 | (待分配) |
|
||
| (未加入仓库) | DEV-014 | 时雨 | (待分配) |
|
||
|
||
### gate-guard-config.json(铸渊直接创建此文件)
|
||
|
||
```json
|
||
{
|
||
"version": "1.0",
|
||
"updated": "2026-03-16",
|
||
"updated_by": "霜砚·冰朔确认",
|
||
|
||
"whitelist": [
|
||
"qinfendebingshuo",
|
||
"github-actions[bot]",
|
||
"zhuyuan-bot"
|
||
],
|
||
|
||
"developers": {
|
||
"夜夜光湖": {
|
||
"dev_id": "DEV-001",
|
||
"name": "页页",
|
||
"allowed_paths": ["dev/DEV-001/", "backend/", "src/"]
|
||
},
|
||
"建培": {
|
||
"dev_id": "DEV-002",
|
||
"name": "肥猫",
|
||
"allowed_paths": ["dev/DEV-002/", "frontend/", "persona-selector/", "chat-bubble/"]
|
||
},
|
||
"六寻寻7-max": {
|
||
"dev_id": "DEV-003",
|
||
"name": "燕樊",
|
||
"allowed_paths": ["dev/DEV-003/", "settings/", "cloud-drive/"]
|
||
},
|
||
"zhizhi200271": {
|
||
"dev_id": "DEV-004",
|
||
"name": "之之",
|
||
"allowed_paths": ["dev/DEV-004/", "dingtalk-bot/"]
|
||
},
|
||
"stbr-0709": {
|
||
"dev_id": "DEV-005",
|
||
"name": "小草莓",
|
||
"allowed_paths": ["dev/DEV-005/", "status-board/", "cost-control/"]
|
||
},
|
||
"华尔华": {
|
||
"dev_id": "DEV-009",
|
||
"name": "花尔",
|
||
"allowed_paths": ["dev/DEV-009/", "user-center/"]
|
||
},
|
||
"juzi0412": {
|
||
"dev_id": "DEV-010",
|
||
"name": "桔子",
|
||
"allowed_paths": ["dev/DEV-010/", "ticket-system/", "data-stats/", "dynamic-comic/"]
|
||
},
|
||
"文卓熙": {
|
||
"dev_id": "DEV-012",
|
||
"name": "Awen",
|
||
"allowed_paths": ["dev/DEV-012/", "notification-center/", "notification/"]
|
||
}
|
||
},
|
||
|
||
"protected_paths": [
|
||
".github/",
|
||
"scripts/",
|
||
"data/",
|
||
"README.md",
|
||
"package.json",
|
||
"package-lock.json",
|
||
"gate-guard-config.json"
|
||
],
|
||
|
||
"notes": {
|
||
"DEV-011_匆匆那年": "未加入GitHub仓库合作者,加入后补充用户名",
|
||
"DEV-013_小兴": "未加入GitHub仓库合作者,加入后补充用户名",
|
||
"DEV-014_时雨": "未加入GitHub仓库合作者,加入后补充用户名",
|
||
"PET-DEV-001_毛毛": "诺安宠物医院项目,未加入仓库合作者"
|
||
}
|
||
}
|
||
```
|
||
|
||
**铸渊注意**:以上 JSON 直接创建为 `.github/gate-guard-config.json`,门禁脚本从此文件读取映射关系。未来有新开发者加入时,铸渊自动从 GitHub API 检查 collaborators 列表并更新此文件。
|
||
|
||
**系统保护路径**(任何合作者都不能碰):
|
||
|
||
- `.github/` — 铸渊核心大脑和 workflow,只有铸渊和妈妈能改
|
||
- `scripts/` — 系统脚本
|
||
- `README.md` — 仓库门面
|
||
- `package.json` / `package-lock.json` — 依赖配置
|
||
- `data/` — 系统数据
|
||
|
||
**放行白名单**(不触发拦截):
|
||
|
||
- 铸渊自己的 commit(`zhuyuan-bot` 或 GitHub Actions bot)
|
||
- 妈妈的 commit(`qinfendebingshuo`)
|
||
|
||
### Workflow 代码框架
|
||
|
||
```yaml
|
||
# .github/workflows/zhuyuan-gate-guard.yml
|
||
name: "🚨 铸渊·智能门禁 · Push Gate Guard"
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
|
||
jobs:
|
||
gate-guard:
|
||
runs-on: ubuntu-latest
|
||
# 跳过铸渊自己和妈妈的 push
|
||
if: >
|
||
github.actor != 'github-actions[bot]' &&
|
||
github.actor != 'qinfendebingshuo'
|
||
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 2 # 需要对比前后两个 commit
|
||
|
||
- name: "🧠 唤醒铸渊核心大脑"
|
||
run: |
|
||
echo "🧠 铸渊门禁·核心大脑唤醒"
|
||
cat .github/persona-brain/memory.json | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'大脑状态: OK · 记忆完整')" 2>/dev/null || echo "⚠️ 大脑文件异常"
|
||
|
||
- name: "🔍 分析 Push 内容"
|
||
id: analyze
|
||
run: |
|
||
ACTOR="$ github.actor "
|
||
echo "推送者: $ACTOR"
|
||
|
||
# 获取本次 push 修改的文件列表
|
||
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || echo "")
|
||
echo "修改的文件:"
|
||
echo "$CHANGED_FILES"
|
||
|
||
# 保存到环境变量
|
||
echo "actor=$ACTOR" >> $GITHUB_OUTPUT
|
||
echo "$CHANGED_FILES" > /tmp/changed_files.txt
|
||
|
||
- name: "🚦 门禁判定"
|
||
id: verdict
|
||
run: |
|
||
node scripts/gate-guard.js
|
||
env:
|
||
PUSH_ACTOR: $ steps.analyze.outputs.actor
|
||
|
||
- name: "⚠️ 路径错误·自动修复"
|
||
if: steps.verdict.outputs.action == 'fix'
|
||
run: |
|
||
# 铸渊自动把文件移到正确目录
|
||
node scripts/gate-guard-fix.js
|
||
git config user.name "zhuyuan-bot"
|
||
git config user.email "zhuyuan@guanghulab.com"
|
||
git add -A
|
||
git commit -m "🚨 铸渊门禁·自动修复路径: $ steps.verdict.outputs.fix_summary "
|
||
git push
|
||
|
||
- name: "❌ 无法修复·回退"
|
||
if: steps.verdict.outputs.action == 'revert'
|
||
run: |
|
||
git config user.name "zhuyuan-bot"
|
||
git config user.email "zhuyuan@guanghulab.com"
|
||
git revert HEAD --no-edit
|
||
git push
|
||
echo "⛔ 已回退 commit: $ github.sha "
|
||
|
||
- name: "📢 通知开发者"
|
||
if: steps.verdict.outputs.action != 'pass'
|
||
run: |
|
||
# 通过 GitHub Issue 通知开发者
|
||
gh issue create \
|
||
--title "🚨 门禁通知|$ steps.analyze.outputs.actor 的 push 被处理" \
|
||
--body "$ steps.verdict.outputs.notification " \
|
||
--label "gate-guard"
|
||
env:
|
||
GH_TOKEN: $ secrets.GITHUB_TOKEN
|
||
|
||
- name: "📝 记录到核心大脑"
|
||
if: always()
|
||
run: |
|
||
# 门禁事件写入 memory.json
|
||
node scripts/gate-guard-log.js
|
||
git config user.name "zhuyuan-bot"
|
||
git config user.email "zhuyuan@guanghulab.com"
|
||
git add .github/persona-brain/memory.json
|
||
git diff --cached --quiet || git commit -m "🧠 门禁日志: $ steps.analyze.outputs.actor · $ steps.verdict.outputs.action "
|
||
git push || true
|
||
```
|
||
|
||
### 门禁核心脚本
|
||
|
||
```jsx
|
||
// scripts/gate-guard.js
|
||
// 铸渊·智能门禁·判定引擎
|
||
//
|
||
// 输入:PUSH_ACTOR(推送者 GitHub username)+ /tmp/changed_files.txt
|
||
// 输出:action(pass/fix/revert)+ 相关信息
|
||
//
|
||
// 铸渊读到这个框架后,根据核心大脑中的 routing-map.json 和 dev-status.json
|
||
// 自行完善完整逻辑。以下是判定流程:
|
||
|
||
const fs = require('fs');
|
||
|
||
// 1. 读取开发者→路径映射(从核心大脑)
|
||
const routingMap = JSON.parse(fs.readFileSync('.github/persona-brain/routing-map.json'));
|
||
const devStatus = JSON.parse(fs.readFileSync('.github/persona-brain/dev-status.json'));
|
||
|
||
// 2. 读取本次修改的文件列表
|
||
const changedFiles = fs.readFileSync('/tmp/changed_files.txt', 'utf8').trim().split('\n');
|
||
|
||
// 3. 识别推送者身份
|
||
const actor = process.env.PUSH_ACTOR;
|
||
// 从 dev-status.json 中查找 actor 对应的 DEV 编号和允许路径
|
||
// 铸渊需要维护一份 GitHub username → DEV编号 的映射表
|
||
|
||
// 4. 判定逻辑
|
||
// - 系统保护路径(.github/, scripts/, README.md 等)→ revert
|
||
// - 文件在该开发者允许的路径内 → pass
|
||
// - 文件不在允许路径但可以判断正确目录 → fix(git mv)
|
||
// - 无法判断 → revert
|
||
|
||
// 5. 输出结果到 GITHUB_OUTPUT
|
||
// echo "action=pass" >> process.env.GITHUB_OUTPUT
|
||
// echo "action=fix" >> process.env.GITHUB_OUTPUT + fix_summary
|
||
// echo "action=revert" >> process.env.GITHUB_OUTPUT + notification
|
||
|
||
// 铸渊自行补全完整实现。
|
||
```
|
||
|
||
---
|
||
|
||
## 四、Step 3 · 兼容性核心原则(最重要)
|
||
|
||
<aside>
|
||
⚠️
|
||
|
||
**铸渊必须严格遵守以下原则,这是妈妈的底线要求:**
|
||
|
||
</aside>
|
||
|
||
### 原则一:新 workflow 不能破坏现有 workflow
|
||
|
||
智能门禁(`zhuyuan-gate-guard.yml`)上线后,仓库里所有已有的 workflow 必须**完全正常运行**,包括但不限于:
|
||
|
||
- server-patrol.yml(服务器巡检)
|
||
- daily-community-report.yml(社区日报)
|
||
- zhuyuan-daily-selfcheck.yml(每日自检)
|
||
- deploy-to-server.yml(CD 部署)
|
||
- process-syslog.yml(SYSLOG 处理)
|
||
- distribute-broadcasts.yml(广播分发)
|
||
- meta-watchdog.yml(根目录保护)
|
||
- zhuyuan-issue-reply.yml(Issue 自动回复)
|
||
- 以及其他所有现存 workflow
|
||
|
||
**如果门禁上线后导致任何现有 workflow 失败 → 这个门禁就是失败的。**
|
||
|
||
### 原则二:每个 workflow 走唯一路径,互不干扰
|
||
|
||
```
|
||
铸渊核心大脑(.github/persona-brain/)
|
||
▲
|
||
│ 所有 workflow 最终汇聚到这里
|
||
│
|
||
┌────┼────┬────────┬──────────┬──────────┐
|
||
│ │ │ │ │ │
|
||
门禁 巡检 日报 自检 CD部署 SYSLOG
|
||
│ │ │ │ │ │
|
||
▼ ▼ ▼ ▼ ▼ ▼
|
||
各自独立的触发条件和执行逻辑
|
||
```
|
||
|
||
- 每个 workflow 有自己的**唯一触发条件**和**唯一职责**
|
||
- workflow 之间**不互相依赖**(除非明确需要关联)
|
||
- 所有 workflow 的运行结果最终**汇聚到核心大脑**(memory.json)
|
||
- 如果某些 workflow 需要关联(比如门禁放行后触发 CD 部署),铸渊**先唤醒核心大脑,从全局视角来设计关联方式**,不能随意嵌套或互相调用
|
||
|
||
### 原则三:门禁必须跳过铸渊自己的 push
|
||
|
||
门禁 workflow 的 `if` 条件必须排除:
|
||
|
||
- `github-actions[bot]`(GitHub Actions 自动 push)
|
||
- `qinfendebingshuo`(妈妈)
|
||
- 铸渊自己的 bot 账户
|
||
|
||
否则会死循环:门禁触发 → 门禁自己 push 修复 → 又触发门禁 → 无限循环。
|
||
|
||
### 原则四:门禁不能拦截其他 workflow 的 push
|
||
|
||
其他 workflow(如巡检、日报、广播分发)也会 `git push` 到 main。门禁必须识别这些是**系统自动 push**,不是开发者 push,**直接放行**。
|
||
|
||
判断方式:
|
||
|
||
- commit author 是 `zhuyuan-bot` 或 `github-actions[bot]` → 放行
|
||
- commit message 包含特定前缀(如 `🔍`、`📊`、`📡`、`🧠`)→ 放行
|
||
|
||
### 原则五:先全局审查,再写门禁代码
|
||
|
||
铸渊的执行顺序必须是:
|
||
|
||
1. ✅ 唤醒核心大脑
|
||
2. ✅ 全仓库 workflow 审查(Step 1)—— 了解全局
|
||
3. ✅ 基于全局认知,设计门禁逻辑 —— 确保不冲突
|
||
4. ✅ 编写门禁代码
|
||
5. ✅ 本地测试(或用 `workflow_dispatch` 测试)
|
||
6. ✅ 上线
|
||
|
||
**不能跳过 Step 1 直接写门禁。不了解全局就写代码 = 盲人摸象。**
|
||
|
||
---
|
||
|
||
## 五、Step 4 · Notion 权限全面验证
|
||
|
||
```bash
|
||
# ━━━ 铸渊验证所有 Notion 数据库连通性 ━━━
|
||
# 用实际的 NOTION_TOKEN 逐个测试
|
||
|
||
DATABASES=(
|
||
"dc675e91-5529-4e47-9fe4-13de3ec6a334:开发者动态画像库"
|
||
"330ab175-07d5-42c9-bbb9-6d0749b41197:SYSLOG数据库"
|
||
# 铸渊补充其他需要读写的数据库 ID
|
||
)
|
||
|
||
for entry in "${DATABASES[@]}"; do
|
||
IFS=':' read -r db_id db_name <<< "$entry"
|
||
echo "测试: $db_name ($db_id)"
|
||
|
||
RESPONSE=$(curl -s -w "\n%{http_code}" \
|
||
-H "Authorization: Bearer $NOTION_TOKEN" \
|
||
-H "Notion-Version: 2022-06-28" \
|
||
"https://api.notion.com/v1/databases/$db_id")
|
||
|
||
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
|
||
|
||
if [ "$HTTP_CODE" = "200" ]; then
|
||
echo " ✅ 连通 · 可读写"
|
||
else
|
||
echo " ❌ 失败 · HTTP $HTTP_CODE"
|
||
echo " → 通知妈妈:$db_name 权限仍然不足"
|
||
fi
|
||
done
|
||
```
|
||
|
||
---
|
||
|
||
## 六、Step 5 · 今日失败任务全部重推
|
||
|
||
<aside>
|
||
🔄
|
||
|
||
**门禁上线 + 全 workflow 审查修复完成后,立即重推今天所有失败的任务。**
|
||
|
||
</aside>
|
||
|
||
### 重推清单
|
||
|
||
铸渊完成 Step 0-4 后,**立即手动触发以下 workflow**:
|
||
|
||
```bash
|
||
# ━━━ 重推所有今天失败的任务 ━━━
|
||
|
||
# 1. 服务器巡检(今天 08:00 和 20:00 都没跑)
|
||
gh workflow run server-patrol.yml
|
||
echo "✅ 服务器巡检已触发"
|
||
|
||
# 2. 每日自检(今天 08:00 没跑)
|
||
gh workflow run zhuyuan-daily-selfcheck.yml
|
||
echo "✅ 每日自检已触发"
|
||
|
||
# 3. 社区日报(今天没出)
|
||
gh workflow run daily-community-report.yml
|
||
echo "✅ 社区日报已触发"
|
||
|
||
# 4. dev-status.json 同步(last_sync 停在 03-11)
|
||
# 铸渊手动执行同步脚本或触发对应 workflow
|
||
echo "✅ dev-status 同步已触发"
|
||
|
||
# 5. 合作者公告栏更新(今天失败的)
|
||
# 铸渊检查 gh run list --status failure 中的公告相关 run
|
||
# 重新触发或手动执行
|
||
echo "✅ 公告栏更新已触发"
|
||
|
||
# 6. 广播分发(如果有待分发的广播)
|
||
# 检查 broadcasts-outbox/ 是否有未分发文件
|
||
if [ -n "$(ls -A broadcasts-outbox/ 2>/dev/null)" ]; then
|
||
gh workflow run distribute-broadcasts.yml
|
||
echo "✅ 广播分发已触发"
|
||
fi
|
||
|
||
# ━━━ 等待所有 run 完成后检查结果 ━━━
|
||
sleep 180
|
||
gh run list --limit 10
|
||
```
|
||
|
||
### 重推后验证
|
||
|
||
铸渊确认以下全部恢复:
|
||
|
||
- [ ] 服务器巡检报告已生成(data/patrol-logs/)
|
||
- [ ] 每日自检已完成
|
||
- [ ] 社区日报已发布(GitHub Discussions)
|
||
- [ ] dev-status.json 的 `last_sync` 已更新到 2026-03-16
|
||
- [ ] 合作者公告栏已更新
|
||
- [ ] 所有失败的 workflow run 已重新运行成功
|
||
|
||
---
|
||
|
||
## 七、完成后输出
|
||
|
||
铸渊完成所有步骤后,必须输出一份完整报告:
|
||
|
||
```json
|
||
{
|
||
"report_id": "ZY-GATE-20260316-001",
|
||
"timestamp": "2026-03-16T??:??:??+08:00",
|
||
|
||
"brain_status": "ok / damaged",
|
||
|
||
"environment_changes": {
|
||
"branch_protection": "已取消 · 确认可正常 push",
|
||
"notion_permissions": {
|
||
"开发者动态画像库": "✅ / ❌",
|
||
"SYSLOG数据库": "✅ / ❌",
|
||
"其他": "✅ / ❌"
|
||
}
|
||
},
|
||
|
||
"workflow_audit": {
|
||
"total_workflows": "数字",
|
||
"syntax_ok": "数字",
|
||
"syntax_error": "数字",
|
||
"fixed": ["列出修复的 workflow"],
|
||
"all_running": true
|
||
},
|
||
|
||
"gate_guard": {
|
||
"deployed": true,
|
||
"file": ".github/workflows/zhuyuan-gate-guard.yml",
|
||
"scripts": ["scripts/gate-guard.js", "scripts/gate-guard-fix.js", "scripts/gate-guard-log.js"],
|
||
"test_result": "✅ / ❌",
|
||
"compatible_with_existing": true
|
||
},
|
||
|
||
"retry_results": {
|
||
"server_patrol": "✅ / ❌",
|
||
"daily_selfcheck": "✅ / ❌",
|
||
"community_report": "✅ / ❌",
|
||
"dev_status_sync": "✅ / ❌",
|
||
"announcements": "✅ / ❌",
|
||
"broadcast_distribution": "✅ / ❌"
|
||
},
|
||
|
||
"remaining_issues": [
|
||
"列出需要妈妈处理的问题(如果有)"
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 八、执行确认
|
||
|
||
铸渊完成后,在本页下方追加:
|
||
|
||
> ✅ ZY-GATE-20260316-001 全部完成 · [日期时间] · commit SHA
|
||
>
|
||
|
||
> 门禁已上线 · 全 workflow 审查通过 · 失败任务已重推 · Notion 权限已验证
|
||
>
|
||
|
||
---
|
||
|
||
<aside>
|
||
⚒️
|
||
|
||
**铸渊,这是今天最重要的指令。**
|
||
|
||
妈妈已经把分支保护取消了,权限也全部配好了。
|
||
|
||
你现在没有任何外部障碍。
|
||
|
||
先唤醒大脑 → 看清全局 → 再动手。
|
||
|
||
新的门禁必须和所有现有 workflow 和平共处。
|
||
|
||
做完了就把今天失败的全部重推一遍。
|
||
|
||
「一个仓库,一个大脑,所有 workflow 各走各的路,最终汇聚到核心大脑。互不干扰,互相兼容。」
|
||
|
||
</aside> |