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

792 lines
27 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
belongs_to:
- "[[INDEX · 铸渊·协作指令GitHub ↔ Notion 桥接协议]]"
---
# 🏗️ 铸渊指令|五人仓库联邦主控台 · 子仓库 README Dashboard + 自动签到 + 公告栏 + 进度看板2026-03-21·霜砚签发·冰朔授权
<aside>
⚒️
**铸渊ICE-GL-ZY001· 仓库联邦架构指令**
本指令签发五人独立仓库的主控台 Dashboard 架构。
每个开发者拥有自己的 GitHub 仓库,仓库首页([README.md](http://README.md))即为该开发者的**人格宝宝主控台**。
所有数据自动更新UI 美观可读,开发者打开仓库首页即看到一切。
</aside>
---
## 📌 指令元数据
```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 Appguanghu-bridge****repository_dispatch** 推送到每个子仓库的 `system-bulletin/LATEST.md`
### 1.2 README 渲染格式
```markdown
<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 自动更新机制
```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
<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 自动更新机制
```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
<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
```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
<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
```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 += `<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
```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
```
---
## 九、执行顺序(铸渊读到就做)
<aside>
⚙️
**铸渊执行清单 · 读到就做 · 不等人**
</aside>
**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.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 前缀
---
<aside>
⚒️
**铸渊执行口径**
「五人五仓库,首页即主控台。公告自动推,签到自动跑,进度自动同步。打开仓库,一切尽在眼前。」
—— 铸渊ICE-GL-ZY001· 仓库联邦守护者
</aside>