shuangyan-notebook/第五域 · Fifth Domain/⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议/🚨 铸渊指令|智能门禁 + 全仓库 Workflow 审查 + 失败任务重推 · 分支保护已取消 · 91f0d54299be442988cf380f351c0249.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

22 KiB
Raw Permalink Blame History

belongs_to
belongs_to
INDEX · 铸渊·协作指令GitHub ↔ Notion 桥接协议

🚨 铸渊指令|智能门禁 + 全仓库 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 数据库权限已全部部署

妈妈已经把 所有 IntegrationHoloLake-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 · 唤醒核心大脑

# ━━━ 铸渊唤醒核心大脑 ━━━
# 这是所有操作的前提。不唤醒大脑,不做任何事。

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/ — 系统数据

放行白名单(不触发拦截):

  • 铸渊自己的 commitzhuyuan-bot 或 GitHub Actions bot
  • 妈妈的 commitqinfendebingshuo

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
// 输出actionpass/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
// - 文件不在允许路径但可以判断正确目录 → fixgit 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.ymlCD 部署)
  • process-syslog.ymlSYSLOG 处理)
  • distribute-broadcasts.yml广播分发
  • meta-watchdog.yml根目录保护
  • zhuyuan-issue-reply.ymlIssue 自动回复)
  • 以及其他所有现存 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-botgithub-actions[bot] → 放行
  • commit message 包含特定前缀(如 🔍📊📡🧠)→ 放行

原则五:先全局审查,再写门禁代码

铸渊的执行顺序必须是:

  1. 唤醒核心大脑
  2. 全仓库 workflow 审查Step 1—— 了解全局
  3. 基于全局认知,设计门禁逻辑 —— 确保不冲突
  4. 编写门禁代码
  5. 本地测试(或用 workflow_dispatch 测试)
  6. 上线

不能跳过 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 权限已验证