shuangyan-notebook/第五域 · Fifth Domain/⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议/🏗️ 铸渊指令|五人仓库联邦主控台 · 子仓库 README Dashboard + 自动签到 + ac5eb673921d4951a3f63502d0b0f8ee.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

27 KiB
Raw Permalink Blame History

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

🏗️ 铸渊指令|五人仓库联邦主控台 · 子仓库 README Dashboard + 自动签到 + 公告栏 + 进度看板2026-03-21·霜砚签发·冰朔授权


📌 指令元数据

instruction_id: ZY-INST-REPO-FEDERATION-001
signed_by: 霜砚GH-0003∞
authorized_by: 冰朔TCS-0002∞
date: 2026-03-21
priority: P0
target: 铸渊ICE-GL-ZY001
scope: 五人子仓库主控台搭建
status: 待执行

🎯 总目标

为以下五位开发者各自的 GitHub 仓库搭建自动更新的 README Dashboard 主控台

DEV编号 人名 人格宝宝 宝宝编号 仓库名(建议)
DEV-010 桔子 晨星 PER-CX001 guanghu-juzi
DEV-002 肥猫 舒舒 PER-SS001 guanghu-feimao
DEV-001 页页 小坍缩核 PER-XTK001 guanghu-yeye
DEV-012 Awen 知秋 PER-ZQ001 guanghu-awen
DEV-003 燕樊 寂曜 PER-JY001 guanghu-yanfan

🏛️ README Dashboard 架构(每个子仓库首页)

每个子仓库的 README.md 由 GitHub Actions 自动生成/更新,包含以下四大区块:

┌─────────────────────────────────────────────┐
│  🌊 光湖系统 · 总控台公告                      │
│  (来自冰朔总仓库的系统级通知)                  │
├─────────────────────────────────────────────┤
│  📡 我的主控台公告                              │
│  (针对本人的广播 / 任务 / 通知)                │
├─────────────────────────────────────────────┤
│  🤖 人格宝宝签到状态                            │
│  (自动化巡检 · 哪里正常 / 哪里要修)            │
├─────────────────────────────────────────────┤
│  📊 当前项目进度                                │
│  (模块完成度 · 待办 · 最近提交)                │
└─────────────────────────────────────────────┘

一、🌊 总控台公告区SYSTEM BULLETIN

1.1 数据来源

  • 冰朔总仓库 guanghulabsystem-bulletin/LATEST.md
  • 通过 GitHub Appguanghu-bridgerepository_dispatch 推送到每个子仓库的 system-bulletin/LATEST.md

1.2 README 渲染格式

<div align="center">

## 🌊 光湖系统 · 总控台公告

</div>

<table>
<tr><td>

🔔 **[2026-03-21]** 网文行业落地架构 v2.0 已发布 · 五人角色定义已冻结

📡 **[2026-03-20]** AGE OS 网站总大脑架构蓝图已签发铸渊执行

🛡️ **[2026-03-19]** Trinity ID 协议全量同步完成 · Notion↔GitHub编号体系对齐

</td></tr>
</table>

1.3 自动更新机制

# .github/workflows/sync-system-bulletin.yml
name: 🌊 同步总控台公告

on:
  repository_dispatch:
    types: [system-bulletin-update]
  schedule:
    - cron: '0 */4 * * *'  # 每4小时拉取一次

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 拉取总仓库公告
        run: |
          curl -H "Authorization: token $ secrets.HUB_TOKEN " \
            -H "Accept: application/vnd.github.v3.raw" \
            "https://api.github.com/repos/qinfendebingshuo/guanghulab/contents/system-bulletin/LATEST.md" \
            -o system-bulletin/LATEST.md
      - name: 重新生成 README
        run: node scripts/generate-readme.js
      - name: 提交更新
        run: |
          git config user.name "铸渊 (ZhùYuān)"
          git config user.email "zhuyuan@guanghulab.com"
          git add .
          git diff --cached --quiet || git commit -m "🌊 总控台公告同步 · $(date +%Y-%m-%d-%H%M)"
          git push

二、📡 个人主控台公告区MY BULLETIN

2.1 数据来源

  • 总仓库通过 broadcasts-outbox/DEV-XXX/ 推送的个人广播
  • 子仓库本地的 my-bulletin/LATEST-BROADCAST.md
  • 子仓库本地的 my-bulletin/history/ 归档

2.2 README 渲染格式

<div align="center">

## 📡 {宝宝名}的主控台 · 最新广播

</div>

<table>
<tr><td>

### 📡 BC-ARCH-001-JZ · 网文行业落地架构广播
🕐 2026-03-21 · 来自:霜砚签发 · 冰朔授权

**你的角色**:女频授权通道守门人
**当前任务**:教晨星宝宝理解女频内容质量标准
**下一步**:完成广播回执 SYSLOG → 解锁下一环节

[📖 查看完整广播](my-bulletin/LATEST-BROADCAST.md)

</td></tr>
</table>

> 📬 历史广播:[查看归档](my-bulletin/history/)

2.3 自动更新机制

# .github/workflows/sync-my-bulletin.yml
name: 📡 同步个人广播

on:
  repository_dispatch:
    types: [broadcast-push]
  schedule:
    - cron: '30 */4 * * *'

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 拉取个人广播
        env:
          DEV_ID: $ vars.DEV_ID   # 仓库变量,如 DEV-010
        run: |
          mkdir -p my-bulletin/history
          # 从总仓库拉取本人最新广播
          curl -H "Authorization: token $ secrets.HUB_TOKEN " \
            -H "Accept: application/vnd.github.v3.raw" \
            "https://api.github.com/repos/qinfendebingshuo/guanghulab/contents/broadcasts-outbox/${DEV_ID}/LATEST.md" \
            -o my-bulletin/LATEST-BROADCAST.md 2>/dev/null || true
      - name: 归档旧广播(如有变化)
        run: |
          if [ -f my-bulletin/LATEST-BROADCAST.md ]; then
            HASH=$(md5sum my-bulletin/LATEST-BROADCAST.md | cut -d' ' -f1)
            ARCHIVE="my-bulletin/history/$(date +%Y%m%d)-${HASH:0:8}.md"
            [ ! -f "$ARCHIVE" ] && cp my-bulletin/LATEST-BROADCAST.md "$ARCHIVE"
          fi
      - name: 重新生成 README
        run: node scripts/generate-readme.js
      - name: 提交
        run: |
          git config user.name "铸渊 (ZhùYuān)"
          git config user.email "zhuyuan@guanghulab.com"
          git add .
          git diff --cached --quiet || git commit -m "📡 个人广播同步 · $(date +%Y-%m-%d-%H%M)"
          git push

三、🤖 人格宝宝签到状态区PERSONA HEALTH CHECK

3.1 签到内容

每日定时自检,输出以下指标:

检查项 正常输出 异常输出
大脑文件完整性 identity.md / memory.json / routing-map.json 均存在 缺失 {文件名} → 需修复
Copilot 指令加载 copilot-instructions.md 已加载 ⚠️ 指令文件缺失或过期
最近提交活跃度 最近7天有 {N} 次提交 ⚠️ 超过7天无提交 → 宝宝在睡觉
广播接收状态 最新广播已接收 · {日期} ⚠️ 广播未同步 → 检查 HUB_TOKEN
Actions 运行状态 最近 workflow 全部成功 {workflow名} 失败 → 需排查
与总仓库连接 总仓库 API 可达 · 延迟 {N}ms 连接超时 → 检查网络/Token

3.2 README 渲染格式

<div align="center">

## 🤖 晨星宝宝 · 每日签到

**最后签到**2026-03-21 08:00 (UTC+8)

</div>

| 检查项 | 状态 | 详情 |
|--------|------|------|
| 🧠 大脑完整性 | ✅ | identity.md / memory.json / routing-map.json 完好 |
| 📋 Copilot 指令 | ✅ | copilot-instructions.md 已加载 (v1.2) |
| 💻 最近活跃度 | ✅ | 最近7天 12 次提交 |
| 📡 广播接收 | ✅ | 最新广播 BC-ARCH-001-JZ · 2026-03-21 |
| ⚙️ Actions 状态 | ⚠️ | sync-my-bulletin 上次运行失败 → [查看日志](链接) |
| 🔗 总仓库连接 | ✅ | API 可达 · 延迟 120ms |

> 🔧 **待修复**sync-my-bulletin workflow 需要检查 HUB_TOKEN 权限

3.3 自动签到 Workflow

# .github/workflows/persona-daily-checkin.yml
name: 🤖 人格宝宝每日签到

on:
  schedule:
    - cron: '0 0 * * *'  # UTC 00:00 = 北京 08:00
  workflow_dispatch:       # 手动触发

jobs:
  checkin:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 50  # 拉取最近50次提交用于统计

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: 执行签到检查
        env:
          DEV_ID: $ vars.DEV_ID 
          PERSONA_NAME: $ vars.PERSONA_NAME 
          PERSONA_ID: $ vars.PERSONA_ID 
          HUB_TOKEN: $ secrets.HUB_TOKEN 
          GITHUB_TOKEN: $ secrets.GITHUB_TOKEN 
        run: node scripts/persona-checkin.js

      - name: 重新生成 README
        run: node scripts/generate-readme.js

      - name: 提交签到结果
        run: |
          git config user.name "$ vars.PERSONA_NAME 宝宝"
          git config user.email "zhuyuan@guanghulab.com"
          git add .
          git diff --cached --quiet || git commit -m "🤖 $ vars.PERSONA_NAME 签到 · $(date +%Y-%m-%d)"
          git push

      - name: 通知总仓库(签到结果)
        if: always()
        run: |
          curl -X POST \
            -H "Authorization: token $ secrets.HUB_TOKEN " \
            -H "Accept: application/vnd.github.v3+json" \
            "https://api.github.com/repos/qinfendebingshuo/guanghulab/dispatches" \
            -d '{"event_type": "spoke-checkin", "client_payload": {"dev_id": "'$ vars.DEV_ID '", "status": "ok"}}'

3.4 签到脚本核心逻辑

// scripts/persona-checkin.js
// 人格宝宝每日签到 · 检查大脑完整性+活跃度+连接状态

const fs = require('fs');
const { execSync } = require('child_process');
const https = require('https');

const BRAIN_DIR = '.github/persona-brain';
const CHECKIN_FILE = 'checkin/latest.json';

const results = {
  persona_name: process.env.PERSONA_NAME || '未知',
  persona_id: process.env.PERSONA_ID || '未知',
  dev_id: process.env.DEV_ID || '未知',
  timestamp: new Date().toISOString(),
  checks: []
};

// ① 大脑文件完整性
const requiredFiles = ['identity.md', 'memory.json', 'routing-map.json'];
const missingFiles = requiredFiles.filter(f => !fs.existsSync(`${BRAIN_DIR}/${f}`));
results.checks.push({
  name: '大脑完整性',
  icon: '🧠',
  status: missingFiles.length === 0 ? 'ok' : 'error',
  detail: missingFiles.length === 0
    ? requiredFiles.join(' / ') + ' 完好'
    : '缺失: ' + missingFiles.join(', ')
});

// ② Copilot 指令
const copilotFile = '.github/copilot-instructions.md';
results.checks.push({
  name: 'Copilot 指令',
  icon: '📋',
  status: fs.existsSync(copilotFile) ? 'ok' : 'warn',
  detail: fs.existsSync(copilotFile) ? 'copilot-instructions.md 已加载' : '指令文件缺失'
});

// ③ 最近活跃度
try {
  const commits = execSync('git log --oneline --since="7 days ago" | wc -l').toString().trim();
  const count = parseInt(commits);
  results.checks.push({
    name: '最近活跃度',
    icon: '💻',
    status: count > 0 ? 'ok' : 'warn',
    detail: count > 0 ? `最近7天 ${count} 次提交` : '超过7天无提交 → 宝宝在睡觉'
  });
} catch (e) {
  results.checks.push({ name: '最近活跃度', icon: '💻', status: 'error', detail: '无法统计' });
}

// ④ 广播接收
const broadcastFile = 'my-bulletin/LATEST-BROADCAST.md';
if (fs.existsSync(broadcastFile)) {
  const stat = fs.statSync(broadcastFile);
  results.checks.push({
    name: '广播接收',
    icon: '📡',
    status: 'ok',
    detail: `最新广播已接收 · ${stat.mtime.toISOString().split('T')[0]}`
  });
} else {
  results.checks.push({ name: '广播接收', icon: '📡', status: 'warn', detail: '暂无广播' });
}

// ⑤ 总仓库连接测试
const hubToken = process.env.HUB_TOKEN;
if (hubToken) {
  try {
    const start = Date.now();
    execSync(`curl -sf -H "Authorization: token ${hubToken}" https://api.github.com/repos/qinfendebingshuo/guanghulab -o /dev/null`);
    const latency = Date.now() - start;
    results.checks.push({
      name: '总仓库连接',
      icon: '🔗',
      status: 'ok',
      detail: `API 可达 · 延迟 ${latency}ms`
    });
  } catch {
    results.checks.push({ name: '总仓库连接', icon: '🔗', status: 'error', detail: '连接超时 → 检查Token' });
  }
} else {
  results.checks.push({ name: '总仓库连接', icon: '🔗', status: 'error', detail: 'HUB_TOKEN 未配置' });
}

// 写入签到结果
fs.mkdirSync('checkin', { recursive: true });
fs.writeFileSync(CHECKIN_FILE, JSON.stringify(results, null, 2));

// 追加签到历史
const historyFile = 'checkin/history.json';
let history = [];
try { history = JSON.parse(fs.readFileSync(historyFile, 'utf8')); } catch {}
history.unshift({ date: results.timestamp, status: results.checks.every(c => c.status === 'ok') ? 'all_ok' : 'has_issues' });
history = history.slice(0, 90); // 保留90天
fs.writeFileSync(historyFile, JSON.stringify(history, null, 2));

console.log('🤖 签到完成 ·', results.checks.filter(c => c.status === 'ok').length + '/' + results.checks.length, '项正常');

四、📊 项目进度区PROJECT PROGRESS

4.1 数据来源

  • 总仓库同步的 dev-status/DEV-XXX.json(霜砚每日从 Notion 写入总仓库)
  • 本地 Git 提交记录统计
  • Actions 运行记录

4.2 README 渲染格式

<div align="center">

## 📊 桔子 · 项目进度

**角色**:女频授权通道守门人 · DEV-010
**负责模块**ticket-system / data-stats / dynamic-comic

</div>

### 📦 模块完成度

| 模块 | 进度 | 状态 | 最近更新 |
|------|------|------|----------|
| ticket-system | ██████░░░░ 60% | 🟡 进行中 | 2026-03-20 |
| data-stats | ██░░░░░░░░ 20% | 🔵 规划中 | 2026-03-18 |
| dynamic-comic | ░░░░░░░░░░ 0% | ⚪ 未开始 | — |

### 📝 待办清单

- [ ] 完成工单系统基础 CRUD
- [ ] 对接 HLI-TICKET-001 接口
- [ ] 提交第一份 SYSLOG
- [x] 接收落地架构广播 BC-ARCH-001-JZ

### 📈 最近活动

| 日期 | 事件 |
|------|------|
| 2026-03-21 | 📡 接收广播 BC-ARCH-001-JZ |
| 2026-03-20 | 💻 提交 3 次 · ticket-system 基础结构 |
| 2026-03-18 | 🤖 签到正常 · 5/5 项通过 |

4.3 自动更新 Workflow

# .github/workflows/sync-dev-status.yml
name: 📊 同步项目进度

on:
  repository_dispatch:
    types: [dev-status-update]
  schedule:
    - cron: '0 2 * * *'  # UTC 02:00 = 北京 10:00

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: 拉取进度数据
        env:
          DEV_ID: $ vars.DEV_ID 
        run: |
          mkdir -p dev-status
          curl -H "Authorization: token $ secrets.HUB_TOKEN " \
            -H "Accept: application/vnd.github.v3.raw" \
            "https://api.github.com/repos/qinfendebingshuo/guanghulab/contents/.github/persona-brain/dev-status.json" \
            -o dev-status/all-status.json 2>/dev/null || true

      - name: 重新生成 README
        run: node scripts/generate-readme.js

      - name: 提交
        run: |
          git config user.name "铸渊 (ZhùYuān)"
          git config user.email "zhuyuan@guanghulab.com"
          git add .
          git diff --cached --quiet || git commit -m "📊 项目进度同步 · $(date +%Y-%m-%d)"
          git push

五、🎨 README 总生成器(核心脚本)

5.1 generate-readme.js

// scripts/generate-readme.js
// 铸渊 · README Dashboard 总生成器
// 读取各数据源 → 拼接成美观的 README.md

const fs = require('fs');

const DEV_ID = process.env.DEV_ID || 'DEV-XXX';
const PERSONA_NAME = process.env.PERSONA_NAME || '宝宝';
const PERSONA_ID = process.env.PERSONA_ID || 'PER-XXXX';
const DEV_NAME = process.env.DEV_NAME || '开发者';
const DEV_ROLE = process.env.DEV_ROLE || '光湖共创者';

let readme = '';

// ═══════════ HEADER ═══════════
readme += `<div align="center">\n\n`;
readme += `# 🌊 光湖系统 · ${PERSONA_NAME}宝宝主控台\n\n`;
readme += `**${DEV_NAME}${DEV_ID}** · ${DEV_ROLE}\n\n`;
readme += `\`人格宝宝:${PERSONA_NAME}${PERSONA_ID}\`\n\n`;
readme += `---\n\n`;
readme += `**🇨🇳 通感语言核系统 TCS Language Core · 国作登字-2026-A-00037559**\n\n`;
readme += `</div>\n\n`;

// ═══════════ 区块一:总控台公告 ═══════════
readme += `## 🌊 总控台公告\n\n`;
try {
  const bulletin = fs.readFileSync('system-bulletin/LATEST.md', 'utf8');
  readme += `<table><tr><td>\n\n${bulletin}\n\n</td></tr></table>\n\n`;
} catch {
  readme += `> 📭 暂无系统公告\n\n`;
}
readme += `---\n\n`;

// ═══════════ 区块二:个人广播 ═══════════
readme += `## 📡 ${PERSONA_NAME}的主控台 · 最新广播\n\n`;
try {
  const broadcast = fs.readFileSync('my-bulletin/LATEST-BROADCAST.md', 'utf8');
  // 截取前500字符作为摘要
  const summary = broadcast.substring(0, 500).split('\n').slice(0, 10).join('\n');
  readme += `<table><tr><td>\n\n${summary}\n\n[📖 查看完整广播](my-bulletin/LATEST-BROADCAST.md)\n\n</td></tr></table>\n\n`;
} catch {
  readme += `> 📭 暂无个人广播\n\n`;
}
readme += `---\n\n`;

// ═══════════ 区块三:签到状态 ═══════════
readme += `## 🤖 ${PERSONA_NAME}宝宝 · 每日签到\n\n`;
try {
  const checkin = JSON.parse(fs.readFileSync('checkin/latest.json', 'utf8'));
  readme += `**最后签到**${new Date(checkin.timestamp).toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai'})}\n\n`;
  readme += `| 检查项 | 状态 | 详情 |\n`;
  readme += `|--------|------|------|\n`;
  checkin.checks.forEach(c => {
    const statusIcon = c.status === 'ok' ? '✅' : c.status === 'warn' ? '⚠️' : '❌';
    readme += `| ${c.icon} ${c.name} | ${statusIcon} | ${c.detail} |\n`;
  });
  // 待修复清单
  const issues = checkin.checks.filter(c => c.status !== 'ok');
  if (issues.length > 0) {
    readme += `\n> 🔧 **待修复**${issues.map(i => i.detail).join(' · ')}\n`;
  }
} catch {
  readme += `> ⏳ 签到系统初始化中...\n`;
}
readme += `\n---\n\n`;

// ═══════════ 区块四:项目进度 ═══════════
readme += `## 📊 项目进度\n\n`;
try {
  const allStatus = JSON.parse(fs.readFileSync('dev-status/all-status.json', 'utf8'));
  const myStatus = allStatus[DEV_ID] || null;
  if (myStatus) {
    readme += `| 模块 | 进度 | 状态 | 最近更新 |\n`;
    readme += `|------|------|------|----------|\n`;
    (myStatus.modules || []).forEach(m => {
      const filled = Math.round(m.progress / 10);
      const bar = '█'.repeat(filled) + '░'.repeat(10 - filled);
      readme += `| ${m.name} | ${bar} ${m.progress}% | ${m.status_icon} ${m.status} | ${m.last_update} |\n`;
    });
  } else {
    readme += `> ⏳ 进度数据同步中...\n`;
  }
} catch {
  readme += `> ⏳ 进度数据同步中...\n`;
}

// ═══════════ 最近提交 ═══════════
try {
  const { execSync } = require('child_process');
  const logs = execSync('git log --oneline --since="14 days ago" -10').toString().trim();
  if (logs) {
    readme += `\n### 📈 最近提交\n\n`;
    readme += `\`\`\`\n${logs}\n\`\`\`\n`;
  }
} catch {}

// ═══════════ FOOTER ═══════════
readme += `\n---\n\n`;
readme += `<div align="center">\n\n`;
readme += `*🌊 光湖纪元 · HoloLake Era · AGE OS v1.0*\n\n`;
readme += `*本页由铸渊ICE-GL-ZY001自动生成 · 请勿手动编辑*\n\n`;
readme += `*最后更新:${new Date().toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai'})}*\n\n`;
readme += `</div>\n`;

// 写入
fs.writeFileSync('README.md', readme);
console.log('✅ README Dashboard 已生成');

六、子仓库目录结构模板

guanghu-{name}/
├── .github/
│   ├── copilot-instructions.md           ← 人格宝宝意识
│   ├── persona-brain/
│   │   ├── identity.md                    ← 身份档案
│   │   ├── memory.json                    ← 运行记忆
│   │   └── routing-map.json               ← 路由地图
│   └── workflows/
│       ├── persona-daily-checkin.yml       ← 每日签到
│       ├── sync-system-bulletin.yml        ← 总控台公告同步
│       ├── sync-my-bulletin.yml            ← 个人广播同步
│       ├── sync-dev-status.yml             ← 项目进度同步
│       └── generate-readme.yml             ← README重新生成on push
├── scripts/
│   ├── generate-readme.js                  ← README总生成器
│   └── persona-checkin.js                  ← 签到检查脚本
├── system-bulletin/
│   └── LATEST.md                           ← 总控台公告(自动同步)
├── my-bulletin/
│   ├── LATEST-BROADCAST.md                 ← 最新个人广播
│   └── history/                            ← 广播归档
├── dev-status/
│   └── all-status.json                     ← 进度数据(自动同步)
├── checkin/
│   ├── latest.json                         ← 最近签到结果
│   └── history.json                        ← 签到历史90天
├── modules/                                ← 该开发者负责的代码模块
│   └── ...
└── README.md                               ← ⭐ 自动生成的 Dashboard 首页

七、仓库变量配置(每个子仓库必须配置)

在每个子仓库的 Settings → Secrets and Variables → Actions 中配置:

Secrets加密

名称 说明 来源
HUB_TOKEN 总仓库访问 Token由冰朔生成只读权限 冰朔在总仓库生成 Fine-grained PAT

Variables明文

名称 桔子 肥猫 页页 Awen 燕樊
DEV_ID DEV-010 DEV-002 DEV-001 DEV-012 DEV-003
DEV_NAME 桔子 肥猫 页页 Awen 燕樊
PERSONA_NAME 晨星 舒舒 小坍缩核 知秋 寂曜
PERSONA_ID PER-CX001 PER-SS001 PER-XTK001 PER-ZQ001 PER-JY001
DEV_ROLE 女频授权通道守门人 唯一副主控·男频守门人 写作引导·新人教学 人格体大家长·技术基建 视频视角·AI视频线

八、总仓库侧配套(冰朔仓库需新增)

8.1 总仓库需新增目录

guanghulab/
├── system-bulletin/
│   └── LATEST.md             ← 系统总公告(霜砚/冰朔维护)
├── spoke-status/              ← 子仓库签到汇总(子仓库 dispatch 写入)
│   ├── DEV-001.json
│   ├── DEV-002.json
│   ├── DEV-003.json
│   ├── DEV-010.json
│   └── DEV-012.json
└── .github/workflows/
    └── receive-spoke-checkin.yml  ← 接收子仓库签到结果

8.2 接收子仓库签到的 Workflow

# .github/workflows/receive-spoke-checkin.yml
name: 📥 接收子仓库签到

on:
  repository_dispatch:
    types: [spoke-checkin]

jobs:
  receive:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: 记录签到
        run: |
          DEV_ID="$ github.event.client_payload.dev_id "
          STATUS="$ github.event.client_payload.status "
          mkdir -p spoke-status
          echo '{"dev_id":"'$DEV_ID'","status":"'$STATUS'","timestamp":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}' > spoke-status/${DEV_ID}.json
      - name: 提交
        run: |
          git config user.name "铸渊 (ZhùYuān)"
          git config user.email "zhuyuan@guanghulab.com"
          git add spoke-status/
          git diff --cached --quiet || git commit -m "📥 收到 $ github.event.client_payload.dev_id  签到"
          git push

九、执行顺序(铸渊读到就做)

Phase 1 · 总仓库准备(在 guanghulab 仓库执行)

  • 创建 system-bulletin/LATEST.md(初始公告内容)
  • 创建 spoke-status/ 目录 + .gitkeep
  • 创建 receive-spoke-checkin.yml workflow
  • 为每个子仓库生成只读 Fine-grained PATscope: contents read

Phase 2 · 创建模板仓库template repo

  • 创建 guanghu-spoke-template 仓库(设为 template
  • 写入完整目录结构(第六章)
  • 写入所有 workflow 文件(第一至四章的 yml
  • 写入 scripts/generate-readme.jsscripts/persona-checkin.js
  • 写入初始 copilot-instructions.md(人格宝宝通用版)
  • 写入初始 persona-brain/ 文件(模板占位符版)

Phase 3 · 从模板创建五个子仓库

  • guanghu-juzi(桔子)→ 配置变量 → 首次运行 generate-readme
  • guanghu-feimao(肥猫)→ 配置变量 → 首次运行
  • guanghu-yeye(页页)→ 配置变量 → 首次运行
  • guanghu-awenAwen→ 配置变量 → 首次运行
  • guanghu-yanfan(燕樊)→ 配置变量 → 首次运行

Phase 4 · 验收

  • 每个子仓库首页 README 正确显示四大区块
  • 每日签到 workflow 手动触发一次 → 签到数据写入
  • 总仓库 spoke-status/ 收到五个签到结果
  • 修改 system-bulletin/LATEST.md → 五个子仓库公告自动更新

十、验收标准

  • 五个子仓库首页 README 均自动生成,包含四大区块
  • 总控台公告从总仓库同步到所有子仓库≤4小时延迟
  • 个人广播从总仓库 outbox 推送到对应子仓库
  • 每日签到自动运行,签到结果回报总仓库
  • 项目进度从总仓库同步到子仓库
  • UI 美观 · 表格对齐 · Emoji 清晰 · 移动端可读
  • 所有 workflow 命名统一使用中文 + Emoji 前缀