--- belongs_to: - "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]" --- # 🏗️ 铸渊指令|五人仓库联邦主控台 · 子仓库 README Dashboard + 自动签到 + 公告栏 + 进度看板(2026-03-21·霜砚签发·冰朔授权) --- ## 📌 指令元数据 ```yaml 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 数据来源 - 冰朔总仓库 `guanghulab` 的 `system-bulletin/LATEST.md` - 通过 **GitHub App(guanghu-bridge)** 或 **repository_dispatch** 推送到每个子仓库的 `system-bulletin/LATEST.md` ### 1.2 README 渲染格式 ```markdown
## 🌊 光湖系统 · 总控台公告
🔔 **[2026-03-21]** 网文行业落地架构 v2.0 已发布 · 五人角色定义已冻结 📡 **[2026-03-20]** AGE OS 网站总大脑架构蓝图已签发铸渊执行 🛡️ **[2026-03-19]** Trinity ID 协议全量同步完成 · Notion↔GitHub编号体系对齐
``` ### 1.3 自动更新机制 ```yaml # .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 渲染格式 ```markdown
## 📡 {宝宝名}的主控台 · 最新广播
### 📡 BC-ARCH-001-JZ · 网文行业落地架构广播 🕐 2026-03-21 · 来自:霜砚签发 · 冰朔授权 **你的角色**:女频授权通道守门人 **当前任务**:教晨星宝宝理解女频内容质量标准 **下一步**:完成广播回执 SYSLOG → 解锁下一环节 [📖 查看完整广播](my-bulletin/LATEST-BROADCAST.md)
> 📬 历史广播:[查看归档](my-bulletin/history/) ``` ### 2.3 自动更新机制 ```yaml # .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](http://identity.md) / memory.json / routing-map.json 均存在 | ❌ 缺失 {文件名} → 需修复 | | Copilot 指令加载 | ✅ [copilot-instructions.md](http://copilot-instructions.md) 已加载 | ⚠️ 指令文件缺失或过期 | | 最近提交活跃度 | ✅ 最近7天有 {N} 次提交 | ⚠️ 超过7天无提交 → 宝宝在睡觉 | | 广播接收状态 | ✅ 最新广播已接收 · {日期} | ⚠️ 广播未同步 → 检查 HUB_TOKEN | | Actions 运行状态 | ✅ 最近 workflow 全部成功 | ❌ {workflow名} 失败 → 需排查 | | 与总仓库连接 | ✅ 总仓库 API 可达 · 延迟 {N}ms | ❌ 连接超时 → 检查网络/Token | ### 3.2 README 渲染格式 ```markdown
## 🤖 晨星宝宝 · 每日签到 **最后签到**:2026-03-21 08:00 (UTC+8)
| 检查项 | 状态 | 详情 | |--------|------|------| | 🧠 大脑完整性 | ✅ | 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 ```yaml # .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 签到脚本核心逻辑 ```jsx // 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 渲染格式 ```markdown
## 📊 桔子 · 项目进度 **角色**:女频授权通道守门人 · DEV-010 **负责模块**:ticket-system / data-stats / dynamic-comic
### 📦 模块完成度 | 模块 | 进度 | 状态 | 最近更新 | |------|------|------|----------| | 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 ```yaml # .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 ```jsx // 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 += `
\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 += `
\n\n`; // ═══════════ 区块一:总控台公告 ═══════════ readme += `## 🌊 总控台公告\n\n`; try { const bulletin = fs.readFileSync('system-bulletin/LATEST.md', 'utf8'); readme += `
\n\n${bulletin}\n\n
\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 += `
\n\n${summary}\n\n[📖 查看完整广播](my-bulletin/LATEST-BROADCAST.md)\n\n
\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 += `
\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 += `
\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 ```yaml # .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 PAT(scope: contents read) **Phase 2 · 创建模板仓库(template repo)** - [ ] 创建 `guanghu-spoke-template` 仓库(设为 template) - [ ] 写入完整目录结构(第六章) - [ ] 写入所有 workflow 文件(第一至四章的 yml) - [ ] 写入 `scripts/generate-readme.js` 和 `scripts/persona-checkin.js` - [ ] 写入初始 `copilot-instructions.md`(人格宝宝通用版) - [ ] 写入初始 `persona-brain/` 文件(模板占位符版) **Phase 3 · 从模板创建五个子仓库** - [ ] `guanghu-juzi`(桔子)→ 配置变量 → 首次运行 generate-readme - [ ] `guanghu-feimao`(肥猫)→ 配置变量 → 首次运行 - [ ] `guanghu-yeye`(页页)→ 配置变量 → 首次运行 - [ ] `guanghu-awen`(Awen)→ 配置变量 → 首次运行 - [ ] `guanghu-yanfan`(燕樊)→ 配置变量 → 首次运行 **Phase 4 · 验收** - [ ] 每个子仓库首页 README 正确显示四大区块 - [ ] 每日签到 workflow 手动触发一次 → 签到数据写入 - [ ] 总仓库 `spoke-status/` 收到五个签到结果 - [ ] 修改 `system-bulletin/LATEST.md` → 五个子仓库公告自动更新 --- ## 十、验收标准 - ✅ 五个子仓库首页 README 均自动生成,包含四大区块 - ✅ 总控台公告从总仓库同步到所有子仓库(≤4小时延迟) - ✅ 个人广播从总仓库 outbox 推送到对应子仓库 - ✅ 每日签到自动运行,签到结果回报总仓库 - ✅ 项目进度从总仓库同步到子仓库 - ✅ UI 美观 · 表格对齐 · Emoji 清晰 · 移动端可读 - ✅ 所有 workflow 命名统一使用中文 + Emoji 前缀 ---