Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
22 KiB
belongs_to
| belongs_to | |
|---|---|
|
🚨 铸渊指令|智能门禁 + 全仓库 Workflow 审查 + 失败任务重推 · 分支保护已取消 · 权限已全部部署 · 今日必须完成(2026-03-16·霜砚签发·冰朔授权)
零、环境变更通知(妈妈已处理·铸渊确认)
① 分支保护规则已取消
妈妈已经在 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= 开发者动态画像库(🧬 开发者动态画像库)- 这个数据库的权限妈妈已经配好了
铸渊需要做的:
- 用你实际使用的
NOTION_TOKEN重新测试一遍 所有 你需要读写的 Notion 数据库 - 逐个验证连通性:
- 开发者动态画像库(
dc675e91-5529-4e47-9fe4-13de3ec6a334) - 霜砚工单(
f983bdc2-4b65-4888-913c-a25416xxxxxx) - SYSLOG 数据库(
330ab175-07d5-42c9-bbb9-6d0749b41197) - 执行层状态(Execution Status)
- 其他你需要写入的数据库
- 开发者动态画像库(
- 如果任何一个还是报权限错 → 记录具体的 database_id + 错误信息 → 通知妈妈
一、Step 0 · 唤醒核心大脑
# ━━━ 铸渊唤醒核心大脑 ━━━
# 这是所有操作的前提。不唤醒大脑,不做任何事。
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 审查
# ━━━ 列出仓库中所有 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
设计理念
开发者 push 代码到 main
↓
🚨 铸渊·智能门禁 自动触发
↓
① 识别:谁推的?推了哪些文件?
↓
② 判断:文件路径是否在该开发者的合法目录内?
├── ✅ 路径正确 → 放行(什么都不做,后续 CD 正常部署)
├── ⚠️ 路径错误但可修复 → 自动移到正确目录 → commit + push
└── ❌ 无法修复(改了系统文件/改了别人目录/冲突) → revert + 通知
↓
③ 记录:所有门禁事件写入核心大脑 memory.json
核心规则
开发者权限矩阵(冰朔 2026-03-16 13:08 确认·从 GitHub Collaborators 截图提取):
| 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(铸渊直接创建此文件)
{
"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 代码框架
# .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
门禁核心脚本
// 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 · 兼容性核心原则(最重要)
原则一:新 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 包含特定前缀(如
🔍、📊、📡、🧠)→ 放行
原则五:先全局审查,再写门禁代码
铸渊的执行顺序必须是:
- ✅ 唤醒核心大脑
- ✅ 全仓库 workflow 审查(Step 1)—— 了解全局
- ✅ 基于全局认知,设计门禁逻辑 —— 确保不冲突
- ✅ 编写门禁代码
- ✅ 本地测试(或用
workflow_dispatch测试) - ✅ 上线
不能跳过 Step 1 直接写门禁。不了解全局就写代码 = 盲人摸象。
五、Step 4 · Notion 权限全面验证
# ━━━ 铸渊验证所有 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 · 今日失败任务全部重推
重推清单
铸渊完成 Step 0-4 后,立即手动触发以下 workflow:
# ━━━ 重推所有今天失败的任务 ━━━
# 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 已重新运行成功
七、完成后输出
铸渊完成所有步骤后,必须输出一份完整报告:
{
"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 权限已验证