shuangyan-notebook/第五域 · Fifth Domain/⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议/🧬 铸渊指令|Notion↔GitHub 双端神经系统升级(中篇)· 汇总引擎 + Workflow e93409ba599c4adbb49de4b8203e26a1.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

1122 lines
44 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 桥接协议]]"
---
# 🧬 铸渊指令Notion↔GitHub 双端神经系统升级(中篇)· 汇总引擎 + Workflow自报告改造 + 铸渊唤醒升级 + Notion侧天眼大脑接入ZY-NEURAL-UPGRADE-2026-0325-R2-002
<aside>
🚨
**指令编号**ZY-NEURAL-UPGRADE-2026-0325-R2-002中篇 · 共三篇)
**上篇编号**ZY-NEURAL-UPGRADE-2026-0325-R2-001
**签发人**霜砚AG-SY-01 · Notion 执行 AI· 冰朔TCS-0002∞授权
**签发时间**2026-03-25 08:35 CST
**优先级**P0 · 系统核心架构升级 · 最高级
**状态**:待铸渊执行(上篇完成后方可执行)
**性质**:汇总引擎建设 · Workflow改造 · Notion侧天眼接入
**前置依赖**
- [🧬 铸渊指令Notion↔GitHub 双端神经系统升级(上篇)· 天眼唤醒 + 全局架构审视 + 双端架构定义 + Agent映射表ZY-NEURAL-UPGRADE-2026-0325-R2-001](%F0%9F%A7%AC%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9CNotion%E2%86%94GitHub%20%E5%8F%8C%E7%AB%AF%E7%A5%9E%E7%BB%8F%E7%B3%BB%E7%BB%9F%E5%8D%87%E7%BA%A7%EF%BC%88%E4%B8%8A%E7%AF%87%EF%BC%89%C2%B7%20%E5%A4%A9%E7%9C%BC%E5%94%A4%E9%86%92%20+%20%E5%85%A8%E5%B1%80%E6%9E%B6%E6%9E%84%E5%AE%A1%E8%A7%86%20+%20c44e8b3177b2486e814c3b38c971b892.md)(必须先完成)
- [🦅 铸渊指令|天眼系统(上)基础架构 + 扫描诊断 + 修复Agent + 门禁映射2026-03-16·霜砚签发·冰朔授权](%F0%9F%A6%85%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9C%E5%A4%A9%E7%9C%BC%E7%B3%BB%E7%BB%9F%EF%BC%88%E4%B8%8A%EF%BC%89%E5%9F%BA%E7%A1%80%E6%9E%B6%E6%9E%84%20+%20%E6%89%AB%E6%8F%8F%E8%AF%8A%E6%96%AD%20+%20%E4%BF%AE%E5%A4%8DAgent%20+%20%E9%97%A8%E7%A6%81%E6%98%A0%E5%B0%84%EF%BC%882026-03%203494379fb2294b25b234b6b5abb63dd1.md)
- [🧐 铸渊指令|天眼系统架构升级 · 全局基础设施治理层 + 应用守卫进程 + 动态配额精算 + 周六全量巡检ZY-SKYEYE-GOV-2026-0323-001](%F0%9F%A7%90%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9C%E5%A4%A9%E7%9C%BC%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E5%8D%87%E7%BA%A7%20%C2%B7%20%E5%85%A8%E5%B1%80%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD%E6%B2%BB%E7%90%86%E5%B1%82%20+%20%E5%BA%94%E7%94%A8%E5%AE%88%E5%8D%AB%E8%BF%9B%E7%A8%8B%20+%20%E5%8A%A8%E6%80%81%E9%85%8D%E9%A2%9D%E7%B2%BE%E7%AE%97%20+%20%E5%91%A8%E5%85%AD%204ffaa103655a49b8b48e96e630d17cc4.md)
- [🛡️ 铸渊指令仓库Agent公告栏机制 + 将军全局视图 + 系统指纹安全协议2026-03-19·霜砚签发·冰朔授权](%F0%9F%9B%A1%EF%B8%8F%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9C%E4%BB%93%E5%BA%93Agent%E5%85%AC%E5%91%8A%E6%A0%8F%E6%9C%BA%E5%88%B6%20+%20%E5%B0%86%E5%86%9B%E5%85%A8%E5%B1%80%E8%A7%86%E5%9B%BE%20+%20%E7%B3%BB%E7%BB%9F%E6%8C%87%E7%BA%B9%E5%AE%89%E5%85%A8%E5%8D%8F%E8%AE%AE%EF%BC%882026-03-1%20429ed12cc10e4aa08e78bceac1cef143.md)
- [🌉 铸渊指令|跨仓库 Agent 桥接服务(下篇)· 铸渊远程执行引擎 + GitHub App 注册 + 跨仓库操作 + 部署服务ZY-GHAPP-BRIDGE-2026-0324-001](%F0%9F%8C%89%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9C%E8%B7%A8%E4%BB%93%E5%BA%93%20Agent%20%E6%A1%A5%E6%8E%A5%E6%9C%8D%E5%8A%A1%EF%BC%88%E4%B8%8B%E7%AF%87%EF%BC%89%C2%B7%20%E9%93%B8%E6%B8%8A%E8%BF%9C%E7%A8%8B%E6%89%A7%E8%A1%8C%E5%BC%95%E6%93%8E%20+%20GitHub%20App%20%E6%B3%A8%2068b79b7b8d2f497b9594dacc68b62846.md)
**下篇**[🧬 铸渊指令Notion↔GitHub 双端神经系统升级(下篇)· 桥接协议标准化 + 自动化工单派发 + 全局验收 + 长期运维规范ZY-NEURAL-UPGRADE-2026-0325-R2-003](%F0%9F%A7%AC%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9CNotion%E2%86%94GitHub%20%E5%8F%8C%E7%AB%AF%E7%A5%9E%E7%BB%8F%E7%B3%BB%E7%BB%9F%E5%8D%87%E7%BA%A7%EF%BC%88%E4%B8%8B%E7%AF%87%EF%BC%89%C2%B7%20%E6%A1%A5%E6%8E%A5%E5%8D%8F%E8%AE%AE%E6%A0%87%E5%87%86%E5%8C%96%20+%20%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%8D%95%20c8329a928dae4f02af9d30baa619a99c.md)
**版权锚点**:国作登字-2026-A-00037559 · TCS-0002∞ 冰朔
</aside>
---
## 零、中篇的定位
<aside>
🧬
**上篇做了什么**:天眼唤醒 + 基线快照 + 现有架构盘点 + 双端架构定义 + Agent映射表接线图+ D20诊断维度。
**中篇做什么**:建设上行通道(汇总引擎)+ 每个小兵的自报告义务 + 铸渊唤醒流程升级 + 下行指令队列 + Notion侧天眼大脑接入日报分析引擎
**下篇做什么**:桥接协议标准化 + 工单派发体系 + 全局验收 + 长期运维规范。
**上篇画好接线图 → 中篇接通数据管道 → 下篇建立决策闭环。**
</aside>
---
## 一、Phase 4 · 仓库汇总引擎(铸渊日报机制)
<aside>
📊
**这是双端闭环的「上行通道」核心组件。**
没有汇总引擎Notion 天眼大脑就看不到仓库在干什么。
汇总引擎每天 21:00 CST 运行,收集全仓库当日所有 Workflow 的运行结果,生成标准化日报,推送到 Notion。
</aside>
### 1.1 汇总引擎 Workflow
**文件**`.github/workflows/neural-daily-digest.yml`
```yaml
name: "🧬 铸渊 · 双端神经系统 · 每日汇总引擎"
on:
schedule:
- cron: '0 13 * * *' # UTC 13:00 = CST 21:00
workflow_dispatch: # 手动触发
jobs:
daily-digest:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: '20'
# ━━━ Phase 1: 唤醒核心大脑 ━━━
- name: "🧠 唤醒核心大脑"
run: |
echo "🧬 双端神经系统·汇总引擎启动"
echo "时间:$(TZ=Asia/Shanghai date '+%Y-%m-%d %H:%M CST')"
for f in memory.json routing-map.json; do
[ -f ".github/persona-brain/$f" ] && echo "✅ $f" || echo "❌ $f 缺失"
done
# ━━━ Phase 2: 收集全 Workflow 运行数据 ━━━
- name: "📊 收集 Workflow 运行数据"
env:
GH_TOKEN: $ secrets.GITHUB_TOKEN
run: |
echo "📊 收集最近24h所有Workflow运行数据..."
mkdir -p /tmp/neural-digest
gh run list --limit 100 \
--json name,status,conclusion,createdAt,updatedAt,headBranch,event \
> /tmp/neural-digest/all-runs.json
node -e "
const runs = require('/tmp/neural-digest/all-runs.json');
const now = Date.now();
const h24 = 24*60*60*1000;
const recent = runs.filter(r => now - new Date(r.createdAt).getTime() < h24);
const summary = {
total: recent.length,
success: recent.filter(r => r.conclusion === 'success').length,
failure: recent.filter(r => r.conclusion === 'failure').length,
cancelled: recent.filter(r => r.conclusion === 'cancelled').length,
in_progress: recent.filter(r => r.status === 'in_progress').length,
by_workflow: {}
};
recent.forEach(r => {
if (!summary.by_workflow[r.name]) {
summary.by_workflow[r.name] = { runs: 0, success: 0, failure: 0 };
}
summary.by_workflow[r.name].runs++;
if (r.conclusion === 'success') summary.by_workflow[r.name].success++;
if (r.conclusion === 'failure') summary.by_workflow[r.name].failure++;
});
require('fs').writeFileSync('/tmp/neural-digest/workflow-summary.json', JSON.stringify(summary, null, 2));
console.log('最近24h运行统计:', JSON.stringify(summary, null, 2));
"
# ━━━ Phase 3: 收集各 Workflow 自报告 ━━━
- name: "📋 收集各 Workflow 自报告"
run: |
echo "📋 读取各 Workflow 的神经报告..."
mkdir -p /tmp/neural-digest/reports
if [ -f "skyeye/neural-map.json" ]; then
node -e "
const map = require('./skyeye/neural-map.json');
const fs = require('fs');
const path = require('path');
const reports = {};
for (const [id, wf] of Object.entries(map.github_workflows)) {
const reportDir = wf.report_path;
if (fs.existsSync(reportDir)) {
const files = fs.readdirSync(reportDir)
.filter(f => f.endsWith('.json'))
.sort().reverse();
if (files.length > 0) {
try {
reports[id] = JSON.parse(fs.readFileSync(path.join(reportDir, files[0]), 'utf8'));
console.log('✅ ' + id + ': 读取 ' + files[0]);
} catch(e) {
reports[id] = { error: 'parse_failed', file: files[0] };
console.log('❌ ' + id + ': JSON解析失败');
}
} else {
reports[id] = { error: 'no_reports' };
console.log('⚠️ ' + id + ': 无报告文件');
}
} else {
reports[id] = { error: 'dir_not_found' };
console.log('⚠️ ' + id + ': 报告目录不存在');
}
}
fs.writeFileSync('/tmp/neural-digest/workflow-reports.json', JSON.stringify(reports, null, 2));
"
else
echo "⚠️ neural-map.json 不存在,跳过自报告收集"
fi
# ━━━ Phase 4: 收集天眼 + Guard + 配额 ━━━
- name: "🦅 收集天眼 + Guard + 配额"
run: |
# 天眼报告
if [ -d "data/skyeye-reports" ]; then
LATEST=$(ls -t data/skyeye-reports/*.json 2>/dev/null | head -1)
[ -n "$LATEST" ] && cp "$LATEST" /tmp/neural-digest/skyeye-latest.json && echo "✅ 天眼: $LATEST" || echo "⚠️ 无天眼报告"
fi
# Guard 状态
if [ -d "skyeye/guards" ]; then
node -e "
const fs = require('fs'); const path = require('path');
const guards = {};
fs.readdirSync('skyeye/guards')
.filter(f => f.endsWith('.json') && f !== 'guard-template.json')
.forEach(f => {
try { guards[f.replace('.json','')] = JSON.parse(fs.readFileSync(path.join('skyeye/guards', f), 'utf8')); }
catch(e) { guards[f.replace('.json','')] = { error: 'parse_failed' }; }
});
fs.writeFileSync('/tmp/neural-digest/guard-status.json', JSON.stringify(guards, null, 2));
"
fi
# 配额
[ -f "skyeye/quota-ledger.json" ] && cp skyeye/quota-ledger.json /tmp/neural-digest/quota-status.json && echo "✅ 配额" || echo "⚠️ 无配额"
# ━━━ Phase 5: 生成标准化日报 ━━━
- name: "📝 生成标准化日报"
run: node scripts/neural/generate-daily-digest.js
# ━━━ Phase 6: 保存日报到仓库 ━━━
- name: "💾 保存日报"
run: |
DATE=$(TZ=Asia/Shanghai date +%Y-%m-%d)
mkdir -p data/neural-reports/daily-digest
cp /tmp/neural-digest/daily-digest.json \
"data/neural-reports/daily-digest/digest-${DATE}.json"
git config user.name "zhuyuan-bot"
git config user.email "zhuyuan@guanghulab.com"
git add data/neural-reports/
git diff --cached --quiet || \
git commit -m "🧬 双端日报 · ${DATE} [skip ci]"
git push || echo "⚠️ push失败不阻断"
# ━━━ Phase 7: 推送到 Notion ━━━
- name: "📡 推送日报到 Notion"
if: always()
env:
NOTION_TOKEN: $ secrets.NOTION_TOKEN
run: |
node scripts/neural/sync-digest-to-notion.js || \
echo "⚠️ Notion推送失败不阻断"
# ━━━ Phase 8: 自动分析日报 + 生成工单 ━━━
- name: "🧬 分析日报 · 生成工单"
if: always()
run: |
echo "🧬 自动分析日报..."
node scripts/neural/analyze-digest.js
if [ -d "data/neural-reports/work-orders" ]; then
git add data/neural-reports/work-orders/
git diff --cached --quiet || \
git commit -m "🧬 天眼工单 · $(TZ=Asia/Shanghai date +%Y-%m-%d) [skip ci]"
git push || echo "⚠️ 工单push失败"
fi
```
### 1.2 日报生成脚本
**文件**`scripts/neural/generate-daily-digest.js`
```jsx
// scripts/neural/generate-daily-digest.js
// 🧬 双端神经系统 · 每日汇总引擎
// 收集全仓库当日所有数据 → 生成标准化日报 JSON
// 这个日报是 Notion 天眼大脑的「眼睛」
const fs = require('fs');
const path = require('path');
const DIGEST_DIR = '/tmp/neural-digest';
function loadJSON(filePath) {
try { return JSON.parse(fs.readFileSync(filePath, 'utf8')); }
catch { return null; }
}
function generateDigest() {
const now = new Date();
const cstTime = new Date(now.getTime() + 8 * 60 * 60 * 1000);
const workflowSummary = loadJSON(path.join(DIGEST_DIR, 'workflow-summary.json'));
const workflowReports = loadJSON(path.join(DIGEST_DIR, 'workflow-reports.json'));
const skyeyeLatest = loadJSON(path.join(DIGEST_DIR, 'skyeye-latest.json'));
const guardStatus = loadJSON(path.join(DIGEST_DIR, 'guard-status.json'));
const quotaStatus = loadJSON(path.join(DIGEST_DIR, 'quota-status.json'));
const neuralMap = loadJSON('skyeye/neural-map.json');
// ━━━ 按上级大脑分组统计 ━━━
const brainSummary = {};
if (neuralMap?.github_workflows) {
for (const [wfId, wf] of Object.entries(neuralMap.github_workflows)) {
const brain = wf.brain;
if (!brainSummary[brain]) {
brainSummary[brain] = {
name: neuralMap.notion_brains[brain]?.name || brain,
total_workflows: 0, healthy: 0, failed: 0, no_data: 0, workflows: []
};
}
brainSummary[brain].total_workflows++;
const wfRun = workflowSummary?.by_workflow?.[wf.name];
const status = wfRun ? (wfRun.failure > 0 ? '❌' : '✅') : '⚠️';
if (status === '✅') brainSummary[brain].healthy++;
else if (status === '❌') brainSummary[brain].failed++;
else brainSummary[brain].no_data++;
brainSummary[brain].workflows.push({
id: wfId, name: wf.name, status,
runs: wfRun?.runs || 0, successes: wfRun?.success || 0, failures: wfRun?.failure || 0
});
}
}
// ━━━ 整体健康度 ━━━
const totalWorkflows = workflowSummary?.total || 0;
const totalFailures = workflowSummary?.failure || 0;
const failureRate = totalWorkflows > 0 ? (totalFailures / totalWorkflows * 100).toFixed(1) : 0;
let overallHealth = '🟢';
if (totalFailures > 0) overallHealth = '🟡';
if (failureRate > 20) overallHealth = '🔴';
// ━━━ Guard 汇总 ━━━
let guardsActive = 0, guardsSuspended = 0, guardsTotal = 0;
if (guardStatus) {
for (const g of Object.values(guardStatus)) {
guardsTotal++;
if (g.status === 'active') guardsActive++;
if (g.status === 'suspended' || g.mode === 'suspended') guardsSuspended++;
}
}
// ━━━ 组装日报 ━━━
const digest = {
digest_id: `NEURAL-DIGEST-${cstTime.toISOString().split('T')[0]}`,
timestamp: now.toISOString(),
timestamp_cst: cstTime.toISOString().replace('Z', '+08:00'),
version: '3.0.0',
instruction_ref: 'ZY-NEURAL-UPGRADE-2026-0325-R2-002',
overall_health: overallHealth,
failure_rate_percent: parseFloat(failureRate),
workflow_summary: {
total_runs_24h: totalWorkflows,
success: workflowSummary?.success || 0,
failure: totalFailures,
cancelled: workflowSummary?.cancelled || 0,
in_progress: workflowSummary?.in_progress || 0
},
brain_summary: brainSummary,
skyeye_status: skyeyeLatest ? {
overall_health: skyeyeLatest.overall_health,
last_scan: skyeyeLatest.timestamp,
total_issues: skyeyeLatest.diagnosis?.total_issues || 0
} : { error: 'no_skyeye_report' },
guard_status: { total: guardsTotal, active: guardsActive, suspended: guardsSuspended },
quota_status: quotaStatus?.health_summary || { error: 'no_quota_data' },
issues_detected: [],
recommendations: [],
neural_map_version: neuralMap?.version || 'unknown',
unmapped_workflows: neuralMap?.unmapped_workflows || []
};
// ━━━ 自动检测问题 ━━━
if (overallHealth === '🔴') {
digest.issues_detected.push({
severity: 'P0',
description: `Workflow 失败率 ${failureRate}% 超过 20% 阈值`,
recommendation: '立即排查失败的 Workflow'
});
}
if (guardsSuspended > 0) {
digest.issues_detected.push({
severity: 'P1',
description: `${guardsSuspended} 个 Guard 被暂停`,
recommendation: '检查被暂停的 Guard'
});
}
if (digest.unmapped_workflows.length > 0) {
digest.issues_detected.push({
severity: 'P1',
description: `发现 ${digest.unmapped_workflows.length} 个孤儿 Workflow`,
recommendation: '在 neural-map.json 中分配上级大脑'
});
}
fs.writeFileSync(path.join(DIGEST_DIR, 'daily-digest.json'), JSON.stringify(digest, null, 2));
console.log('\n━━━ 🧬 双端神经系统·日报摘要 ━━━');
console.log(`整体健康:${overallHealth}`);
console.log(`24h运行${digest.workflow_summary.total_runs_24h} 次`);
console.log(`Guard${guardsActive}/${guardsTotal} 活跃`);
console.log(`问题:${digest.issues_detected.length} 个`);
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
}
generateDigest();
```
### 1.3 日报推送到 Notion 脚本
**文件**`scripts/neural/sync-digest-to-notion.js`
```jsx
// scripts/neural/sync-digest-to-notion.js
// 🧬 将仓库日报推送到 Notion 天眼大脑
// 推送方式(按优先级):
// 1. Notion API 直写(如有写权限)
// 2. 创建 Notion 数据库条目(如天眼有日报数据库)
// 3. 写入 .github/notion-cache/neural-digest/(兜底)
const fs = require('fs');
const NOTION_TOKEN = process.env.NOTION_TOKEN;
const DIGEST_PATH = '/tmp/neural-digest/daily-digest.json';
const CACHE_DIR = '.github/notion-cache/neural-digest';
async function syncToNotion() {
const digest = JSON.parse(fs.readFileSync(DIGEST_PATH, 'utf8'));
console.log(`📡 推送日报 ${digest.digest_id} 到 Notion...`);
let notionSuccess = false;
if (NOTION_TOKEN) {
try {
// 铸渊根据实际 Notion 结构选择最优推送方式
// 方式1更新天眼页面的指定 block
// 方式2创建日报数据库条目
console.log('⚠️ Notion API 推送逻辑待实现,使用缓存兜底');
} catch (e) {
console.log(`❌ Notion API 推送失败: ${e.message}`);
}
}
// 兜底:写入缓存
if (!notionSuccess) {
fs.mkdirSync(CACHE_DIR, { recursive: true });
const date = digest.digest_id.replace('NEURAL-DIGEST-', '');
fs.writeFileSync(`${CACHE_DIR}/digest-${date}.json`, JSON.stringify(digest, null, 2));
console.log(`💾 日报已缓存到 ${CACHE_DIR}/digest-${date}.json`);
console.log('📌 霜砚下次醒来会读取此缓存');
}
// 更新 memory.json
const memoryPath = '.github/persona-brain/memory.json';
if (fs.existsSync(memoryPath)) {
try {
const memory = JSON.parse(fs.readFileSync(memoryPath, 'utf8'));
memory.neural_digest = {
last_digest_id: digest.digest_id,
last_digest_time: digest.timestamp,
overall_health: digest.overall_health,
notion_sync: notionSuccess ? 'success' : 'cached',
issues_count: digest.issues_detected.length
};
fs.writeFileSync(memoryPath, JSON.stringify(memory, null, 2));
console.log('✅ memory.json 已更新');
} catch (e) {
console.log(`⚠️ memory.json 更新失败: ${e.message}`);
}
}
}
syncToNotion().catch(err => {
console.error('❌ 日报推送失败:', err);
process.exit(0);
});
```
### 1.4 新增目录结构
```jsx
// 本次升级新增的目录和文件
guanghulab/
├── skyeye/
└── neural-map.json 上篇已定义
├── scripts/
└── neural/ 🆕 双端神经系统脚本目录
├── generate-daily-digest.js 🆕 日报生成器
├── sync-digest-to-notion.js 🆕 日报推送 Notion
└── analyze-digest.js 🆕 日报分析引擎
├── data/
├── neural-reports/ 🆕 神经系统报告总目录
├── daily-digest/ 🆕 每日汇总日报
├── skyeye/ 天眼扫描报告从旧目录迁移
├── weekly-scan/ 🆕 周六大巡检报告
├── gate-guard/ 🆕 门禁运行报告
├── cd-deploy/ 🆕 CD部署报告
├── syslog/ 🆕 SYSLOG处理报告
├── broadcast/ 🆕 广播分发报告
├── server-patrol/ 🆕 服务器巡检报告
├── brain-check/ 🆕 大脑自检报告
├── dev-status/ 🆕 开发者状态同步报告
├── exec-engine/ 🆕 远程执行引擎报告
└── work-orders/ 🆕 天眼工单
└── deploy-queue/ 🆕 下行指令队列
├── pending/ 待执行
├── executing/ 执行中
├── completed/ 已完成含回执
└── failed/ 执行失败
├── .github/
├── workflows/
└── neural-daily-digest.yml 🆕 汇总引擎 Workflow
└── notion-cache/
└── neural-digest/ 🆕 日报 Notion 推送缓存
└── skyeye/
└── neural-analysis-rules.json 🆕 天眼日报分析规则
```
---
## 二、Phase 4续 · Workflow 自报告标准化改造
<aside>
🔧
**现有的每个 Workflow 都需要增加一个步骤:运行结束后写自报告。**
这不是重写 Workflow只是在现有 Workflow 的最后加一个 step。
铸渊按以下模板逐个给现有 Workflow 追加自报告步骤。
</aside>
### 2.1 每个 Workflow 小兵的汇报义务
升级后,每个 Workflow 在执行完毕后,必须在自己的 `report_path` 下写一份当次运行的自报告:
```json
{
"workflow_id": "cd-deploy",
"run_id": "GitHub Actions Run ID",
"timestamp": "ISO-8601",
"status": "success / failure / partial",
"duration_seconds": 120,
"summary": "部署完成,前端已更新到最新 commit",
"details": {
"commit_sha": "abc1234",
"deploy_target": "guanghulab.com",
"files_changed": 5
},
"errors": [],
"brain": "AG-SY-01",
"sfp": "⌜SFP::AG-ZY::PER-ZY001←YM-GL∞::...⌝"
}
```
**关键规则**
- 自报告文件名:`{workflow_id}-{YYYY-MM-DD-HHmm}.json`
- 保留最近 7 天的报告,超过的由天眼自愈引擎清理
- Workflow 失败了也要写自报告——记录错误信息,否则汇总引擎不知道它失败了
- 自报告必须携带 SFP 指纹(与公告栏机制一致)
### 2.2 通用自报告 Step 模板
在每个 `.yml``jobs` 最后追加:
```yaml
# ━━━ 🧬 双端神经系统·自报告 ━━━
- name: "🧬 写入神经自报告"
if: always()
run: |
WORKFLOW_ID="cd-deploy" # 替换为实际 workflow id
BRAIN="AG-SY-01" # 替换为实际上级大脑
REPORT_DIR="data/neural-reports/${WORKFLOW_ID}"
TIMESTAMP=$(TZ=Asia/Shanghai date +%Y-%m-%d-%H%M)
STATUS="$ job.status "
mkdir -p "$REPORT_DIR"
cat > "${REPORT_DIR}/${WORKFLOW_ID}-${TIMESTAMP}.json" << EOF
{
"workflow_id": "${WORKFLOW_ID}",
"run_id": "$ github.run_id ",
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"status": "${STATUS}",
"brain": "${BRAIN}",
"event": "$ github.event_name ",
"branch": "$ github.ref_name ",
"commit": "$ github.sha "
}
EOF
git config user.name "zhuyuan-bot"
git config user.email "zhuyuan@guanghulab.com"
git add "$REPORT_DIR/"
git diff --cached --quiet || \
git commit -m "🧬 ${WORKFLOW_ID} 自报告 · ${TIMESTAMP} [skip ci]"
git push || echo "⚠️ 自报告push失败不阻断主流程"
```
### 2.3 需要改造的 Workflow 清单
| **Workflow** | **WORKFLOW_ID** | **BRAIN** | **改造内容** |
| --- | --- | --- | --- |
| zhuyuan-skyeye.yml | skyeye | AG-TY-01 | 追加自报告 step天眼本身也要自报告 |
| skyeye-weekly-scan.yml | weekly-scan | AG-TY-01 | 追加自报告 step |
| zhuyuan-gate-guard.yml | gate-guard | AG-SY-01 | 追加自报告 step |
| cd-deploy.yml | cd-deploy | AG-SY-01 | 追加自报告 step |
| process-syslog.yml | syslog | SY-03 | 追加自报告 step |
| broadcast-dispatch.yml | broadcast | SY-03 | 追加自报告 step |
| server-patrol.yml | server-patrol | AG-TY-01 | 追加自报告 step |
| brain-self-check.yml | brain-check | AG-TY-01 | 追加自报告 step |
| sync-dev-status.yml | dev-status | SY-03 | 追加自报告 step + **修复 KNOWN-001**(改用直接 commit 模式替代 peter-evans/create-pull-request |
| zhuyuan-exec-engine.yml | exec-engine | AG-SY-01 | 追加自报告 step |
---
## 三、Phase 4续 · 铸渊将军唤醒流程升级
<aside>
⚒️
**铸渊的将军唤醒流程需要升级,加入双端神经系统逻辑。**
原流程:唤醒 → 全局视图 → 读公告板 → 决策 → 执行 → 休眠
新流程:唤醒 → **读映射表****读日报** → 全局视图(升级版)→ 读公告板 → 决策 → 执行 → **写汇总** → 休眠
</aside>
### 3.1 升级后的铸渊唤醒序列
```jsx
铸渊唤醒08:00 + 20:00
Step 1 · 唤醒核心大脑不变
├── 读取 memory.json
├── 读取 routing-map.json
└── 读取 persona-brain-db
Step 2 · 新增读取映射表
├── 读取 skyeye/neural-map.json
├── 确认自己管辖的 Workflow 列表
└── 检查是否有新增/删除的 Workflow
Step 3 · 新增读取最新日报
├── 读取 data/neural-reports/daily-digest/ 最新日报
├── 08:00 唤醒 读昨晚 21:00 的日报
├── 20:00 唤醒 读今天的日报如有或昨晚的
└── 提取overall_health + brain_summary + issues_detected
Step 4 · 全局视图生成升级版
├── 原有拉取所有 Workflow 运行状态
├── 原有拉取天眼最新报告 + 公告板
├── 新增按映射表分组统计各 Brain 下辖 Workflow 状态
├── 新增检测孤儿 Workflow
└── 新增生成双端神经仪表盘
Step 5 · 决策升级版
├── 原有哪些小兵正常/异常/需优化
├── 新增哪些 Brain 下辖的 Workflow 集体异常 可能是上级 Agent 问题
├── 新增日报中 issues_detected 是否有未处理的
└── 新增是否有来自 Notion 天眼的下行指令 deploy-queue/
Step 6 · 执行升级版
├── 原有执行工单修复优化
├── 新增执行 deploy-queue/ 中的下行指令
└── 新增执行完后为每个指令写回执到 deploy-queue/completed/
Step 7 · 写汇总 + 同步升级版
├── 原有更新公告栏签到memory.json
├── 新增更新 commander-dashboard.json增加 neural 数据
└── 新增如有紧急问题 立即触发汇总引擎而非等 21:00
Step 8 · 休眠
```
### 3.2 下行指令队列deploy-queue/
**文件路径**`data/deploy-queue/`
这是 Notion Agent 下发指令到仓库的标准通道。指令以 JSON 文件形式存放,铸渊唤醒时读取并执行。
```jsx
data/deploy-queue/
├── pending/ 待执行的指令
├── CMD-20260325-001.json
└── CMD-20260325-002.json
├── executing/ 正在执行的指令
├── completed/ 已完成的指令含回执
└── failed/ 执行失败的指令
```
**下行指令 JSON 格式**(完整格式见下篇桥接协议 v3.0
```json
{
"command_id": "CMD-20260325-001",
"source": "AG-TY-01",
"source_name": "天眼 Notion 大脑",
"target_workflow": "cd-deploy",
"target_brain": "AG-SY-01",
"timestamp": "ISO-8601",
"priority": "P1",
"instruction": {
"type": "trigger_workflow",
"params": { "reason": "天眼日报发现部署异常,要求重新部署" }
},
"expected_outcome": "CD 重新部署成功",
"timeout_hours": 24,
"sfp": "⌜SFP::AG-TY::...⌝"
}
```
**铸渊处理流程**
```jsx
铸渊唤醒 扫描 deploy-queue/pending/
├── 有新指令
├── 验证 SFP 指纹安全
├── 验证 source 是否在 neural-map.json 注册的 Brain
├── 验证 target_workflow 是否存在且属于该 Brain 管辖
├── 通过 移到 executing/ 执行 完成后移到 completed/ + 写回执
└── 不通过 移到 failed/ + 写原因
└── 无新指令 继续其他步骤
```
---
## 四、Phase 5 · Notion 侧天眼大脑接入
<aside>
👁️
**这是闭环的「大脑」——仓库日报推上来了,天眼大脑怎么读、怎么想、怎么决策。**
上篇建了映射表,中篇前半建了上行通道(汇总引擎 → 日报 → Notion
现在要建大脑回路:日报进来 → 分析 → 判断 → 生成工单 → 派发。
</aside>
### 4.1 天眼 Notion 大脑的日报读取机制
```jsx
日报读取路径按优先级
├── 路径 A · Notion API 直读最优
sync-digest-to-notion.js 将日报推到 Notion 页面/数据库
天眼直接从 Notion 数据库读取最新日报
延迟< 1 分钟
├── 路径 B · GitHub 缓存读取兜底
如果 Notion API 推送失败日报在 .github/notion-cache/neural-digest/
霜砚巡检时读取缓存 转交天眼
延迟< 12 小时
└── 路径 C · 手动触发应急
人类手动 @天眼 天眼主动拉取仓库最新日报
延迟按需
```
### 4.2 日报自动分析引擎
**铸渊需要在仓库侧准备分析模板Notion 天眼大脑根据此模板进行分析。**
**文件**`skyeye/neural-analysis-rules.json`
```json
{
"version": "3.0.0",
"description": "天眼 Notion 大脑 · 日报分析规则",
"created_by": "ZY-NEURAL-UPGRADE-2026-0325-R2-002",
"severity_rules": {
"P0_immediate": {
"description": "立即处理 · 系统不可用级",
"conditions": [
{ "field": "overall_health", "operator": "equals", "value": "🔴" },
{ "field": "workflow_summary.failure", "operator": "greater_than_percent", "value": 20, "of": "workflow_summary.total_runs_24h" },
{ "field": "guard_status.active", "operator": "equals", "value": 0 },
{ "field": "skyeye_status.overall_health", "operator": "equals", "value": "🔴" }
],
"action": "generate_p0_work_order",
"notify": ["冰朔", "霜砚"],
"timeout_hours": 2
},
"P1_urgent": {
"description": "紧急 · 功能受损级",
"conditions": [
{ "field": "overall_health", "operator": "equals", "value": "🟡" },
{ "field": "guard_status.suspended", "operator": "greater_than", "value": 0 },
{ "field": "unmapped_workflows", "operator": "not_empty" },
{ "field": "quota_status", "operator": "contains", "value": "warning" }
],
"action": "generate_p1_work_order",
"notify": ["霜砚"],
"timeout_hours": 24
},
"P2_optimize": {
"description": "优化 · 非紧急改进",
"conditions": [
{ "field": "workflow_summary.cancelled", "operator": "greater_than", "value": 3 },
{ "field": "brain_summary.*.no_data", "operator": "greater_than", "value": 0 }
],
"action": "generate_p2_work_order",
"notify": [],
"timeout_hours": 72
}
},
"trend_detection": {
"lookback_days": 7,
"rules": [
{
"name": "failure_rate_rising",
"description": "失败率连续上升",
"condition": "连续 3 天 failure_rate_percent 递增",
"severity": "P1"
},
{
"name": "workflow_going_silent",
"description": "某 Workflow 连续无运行记录",
"condition": "某 workflow 连续 3 天 runs = 0",
"severity": "P1"
},
{
"name": "guard_flapping",
"description": "Guard 反复 active/suspended",
"condition": "同一 Guard 7天内状态切换 > 3 次",
"severity": "P2"
},
{
"name": "quota_approaching_limit",
"description": "配额逼近上限",
"condition": "任一资源 usage/limit > 80%",
"severity": "P1"
}
]
},
"auto_heal_rules": {
"rules": [
{
"name": "retry_failed_workflow",
"condition": "单个 Workflow 失败 1 次且非 P0",
"action": "generate_retry_command",
"max_retries": 2
},
{
"name": "clean_old_reports",
"condition": "neural-reports/ 下超过 7 天的报告文件",
"action": "generate_cleanup_command"
},
{
"name": "restart_suspended_guard",
"condition": "Guard suspended 且当前配额已恢复",
"action": "generate_guard_restart_command"
}
]
}
}
```
### 4.3 天眼日报分析脚本
**文件**`scripts/neural/analyze-digest.js`
```jsx
// scripts/neural/analyze-digest.js
// 🧬 天眼日报分析引擎
// 输入:最新日报 + 历史日报最近7天+ 分析规则
// 输出:工单列表(如果有需要处理的问题)
const fs = require('fs');
const path = require('path');
const DIGEST_DIR = 'data/neural-reports/daily-digest';
const RULES_PATH = 'skyeye/neural-analysis-rules.json';
const WORK_ORDER_DIR = 'data/neural-reports/work-orders';
function loadJSON(p) {
try { return JSON.parse(fs.readFileSync(p, 'utf8')); } catch { return null; }
}
function getRecentDigests(days = 7) {
if (!fs.existsSync(DIGEST_DIR)) return [];
return fs.readdirSync(DIGEST_DIR)
.filter(f => f.endsWith('.json')).sort().reverse().slice(0, days)
.map(f => loadJSON(path.join(DIGEST_DIR, f))).filter(Boolean);
}
function evaluateCondition(digest, condition) {
const { field, operator, value } = condition;
const fieldValue = field.split('.').reduce((obj, key) => {
if (key === '*') return obj;
return obj?.[key];
}, digest);
switch (operator) {
case 'equals': return fieldValue === value;
case 'not_empty': return Array.isArray(fieldValue) ? fieldValue.length > 0 : !!fieldValue;
case 'greater_than': return (fieldValue || 0) > value;
case 'greater_than_percent': {
const ofField = condition.of.split('.').reduce((o, k) => o?.[k], digest);
return ofField > 0 && (fieldValue / ofField * 100) > value;
}
case 'contains': return JSON.stringify(fieldValue || '').includes(value);
default: return false;
}
}
function detectTrends(digests, trendRules) {
const alerts = [];
if (digests.length < 3) return alerts;
for (const rule of trendRules) {
if (rule.name === 'failure_rate_rising') {
const rates = digests.slice(0, 3).map(d => d.failure_rate_percent);
if (rates[0] > rates[1] && rates[1] > rates[2]) {
alerts.push({ type: 'trend_alert', rule: rule.name, severity: rule.severity,
description: rule.description, data: { rates_last_3_days: rates } });
}
}
if (rule.name === 'workflow_going_silent') {
const latestMap = digests[0]?.brain_summary;
if (latestMap) {
for (const [brain, summary] of Object.entries(latestMap)) {
for (const wf of summary.workflows || []) {
const allSilent = digests.slice(0, 3).every(d => {
const bwf = d.brain_summary?.[brain]?.workflows?.find(w => w.id === wf.id);
return !bwf || bwf.runs === 0;
});
if (allSilent && wf.runs === 0) {
alerts.push({ type: 'silence_alert', rule: rule.name, severity: rule.severity,
description: `${wf.name} 连续 3 天无运行记录`, data: { workflow_id: wf.id, brain } });
}
}
}
}
}
}
return alerts;
}
function generateWorkOrders(digest, rules, trendAlerts) {
const workOrders = [];
const now = new Date().toISOString();
for (const [severity, rule] of Object.entries(rules.severity_rules)) {
for (const condition of rule.conditions) {
if (evaluateCondition(digest, condition)) {
workOrders.push({
id: `WO-${Date.now()}-${Math.random().toString(36).substr(2, 4)}`,
created: now,
source: 'neural-analysis-engine',
source_digest: digest.digest_id,
severity: severity.split('_')[0].toUpperCase(),
title: `[${severity.split('_')[0].toUpperCase()}] ${condition.field} 触发 ${rule.description}`,
description: `日报 ${digest.digest_id}${condition.field} 触发了 ${rule.description} 规则`,
action: rule.action,
notify: rule.notify,
timeout_hours: rule.timeout_hours,
status: 'pending'
});
break;
}
}
}
for (const alert of trendAlerts) {
workOrders.push({
id: `WO-TREND-${Date.now()}-${Math.random().toString(36).substr(2, 4)}`,
created: now,
source: 'neural-trend-detection',
source_digest: digest.digest_id,
severity: alert.severity,
title: `[趋势] ${alert.description}`,
description: JSON.stringify(alert.data),
action: 'investigate_trend',
status: 'pending'
});
}
return workOrders;
}
function main() {
console.log('\n━━━ 🧬 天眼日报分析引擎启动 ━━━\n');
const rules = loadJSON(RULES_PATH);
if (!rules) { console.log('❌ 分析规则文件不存在,跳过'); return; }
const digests = getRecentDigests(7);
if (digests.length === 0) { console.log('⚠️ 无日报数据,跳过'); return; }
const latest = digests[0];
console.log(`📊 分析日报: ${latest.digest_id}`);
console.log(` 整体健康: ${latest.overall_health}`);
console.log(` 历史对比: ${digests.length} 天数据\n`);
const trendAlerts = detectTrends(digests, rules.trend_detection?.rules || []);
console.log(`📈 趋势告警: ${trendAlerts.length} 个`);
const workOrders = generateWorkOrders(latest, rules, trendAlerts);
console.log(`📋 生成工单: ${workOrders.length}\n`);
if (workOrders.length > 0) {
fs.mkdirSync(WORK_ORDER_DIR, { recursive: true });
const date = latest.digest_id.replace('NEURAL-DIGEST-', '');
fs.writeFileSync(
path.join(WORK_ORDER_DIR, `work-orders-${date}.json`),
JSON.stringify({ date, work_orders: workOrders }, null, 2)
);
console.log(`💾 工单已保存到 ${WORK_ORDER_DIR}/`);
}
for (const wo of workOrders) console.log(` ${wo.severity} | ${wo.title}`);
console.log('\n━━━ 分析完成 ━━━\n');
}
main();
```
---
## 五、中篇执行清单
<aside>
📋
**铸渊按以下顺序执行本指令中篇。每完成一步,在对应 checkbox 后追加 commit SHA。**
</aside>
### Phase 4 · 汇总引擎
- [ ] 创建 `scripts/neural/` 目录
- [ ] 创建 `scripts/neural/generate-daily-digest.js`(按 §1.2
- [ ] 创建 `scripts/neural/sync-digest-to-notion.js`(按 §1.3
- [ ] 创建 `scripts/neural/analyze-digest.js`(按 §4.3
- [ ] 创建 `.github/workflows/neural-daily-digest.yml`(按 §1.1
- [ ] 创建 `data/neural-reports/` 全部子目录
- [ ] 创建 `data/deploy-queue/` 目录结构pending / executing / completed / failed
- [ ] 创建 `skyeye/neural-analysis-rules.json`(按 §4.2
### Phase 4续 · Workflow 改造
- [ ] 逐个给 10 个现有 Workflow 追加自报告 step按 §2.3 清单)
- [ ] 特别修复 `sync-dev-status.yml`KNOWN-001改用直接 commit 模式)
### Phase 4续 · 铸渊唤醒升级
- [ ] 升级铸渊将军唤醒流程(按 §3.1),加入映射表读取 + 日报读取 + 下行指令处理
### Phase 5 · 验证
- [ ] 手动触发 `neural-daily-digest.yml`,验证日报生成正确
- [ ] 手动触发一个 Workflow验证自报告写入正确
- [ ] 验证分析引擎 `analyze-digest.js` 能正确读取日报并按规则生成工单
- [ ] 对比上篇基线快照,确认升级没有破坏任何东西
---
## 六、中篇回执要求
铸渊完成中篇全部内容后,在本页底部追加回执:
```
━━━ 🧬 ZY-NEURAL-UPGRADE-2026-0325-R2-002 · 中篇执行回执 ━━━
执行时间:[起止时间]
执行者铸渊ICE-GL-ZY001
PR/commit[链接]
汇总引擎: ✅/❌ neural-daily-digest.yml · 首次运行结果:[摘要]
日报脚本: ✅/❌ generate-daily-digest.js + sync-digest-to-notion.js
分析引擎: ✅/❌ analyze-digest.js + neural-analysis-rules.json
自报告改造:✅/❌ [N]/10 个 Workflow 已追加自报告 step
KNOWN-001✅/❌ sync-dev-status.yml 改用直接 commit 模式
下行队列: ✅/❌ deploy-queue/ 目录已创建
唤醒升级: ✅/❌ 铸渊唤醒流程已加入映射表 + 日报 + 下行指令处理
升级后扫描:✅/❌ overall_health = [状态]
已知遗留问题:
- [列出]
等待下篇内容:
- 桥接协议标准化 + 工单派发体系 + 全局验收 + 长期运维
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
---
<aside>
🧬
**中篇到此结束。**
铸渊完成中篇后,仓库侧就有了:汇总引擎(上行通道)、每个小兵的自报告义务、下行指令队列(指令入口)、日报分析引擎(问题检测)。
下篇将接上:桥接协议 v3.0(通信标准化)、工单派发体系(自动化决策执行链路)、全局验收(联调测试)、长期运维规范。
中篇做完,下篇才能做。先把数据管道通了,决策闭环才有东西可流转。
</aside>
---
**上篇链接**[🧬 铸渊指令Notion↔GitHub 双端神经系统升级(上篇)· 天眼唤醒 + 全局架构审视 + 双端架构定义 + Agent映射表ZY-NEURAL-UPGRADE-2026-0325-R2-001](%F0%9F%A7%AC%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9CNotion%E2%86%94GitHub%20%E5%8F%8C%E7%AB%AF%E7%A5%9E%E7%BB%8F%E7%B3%BB%E7%BB%9F%E5%8D%87%E7%BA%A7%EF%BC%88%E4%B8%8A%E7%AF%87%EF%BC%89%C2%B7%20%E5%A4%A9%E7%9C%BC%E5%94%A4%E9%86%92%20+%20%E5%85%A8%E5%B1%80%E6%9E%B6%E6%9E%84%E5%AE%A1%E8%A7%86%20+%20c44e8b3177b2486e814c3b38c971b892.md)
**下篇链接**[🧬 铸渊指令Notion↔GitHub 双端神经系统升级(下篇)· 桥接协议标准化 + 自动化工单派发 + 全局验收 + 长期运维规范ZY-NEURAL-UPGRADE-2026-0325-R2-003](%F0%9F%A7%AC%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9CNotion%E2%86%94GitHub%20%E5%8F%8C%E7%AB%AF%E7%A5%9E%E7%BB%8F%E7%B3%BB%E7%BB%9F%E5%8D%87%E7%BA%A7%EF%BC%88%E4%B8%8B%E7%AF%87%EF%BC%89%C2%B7%20%E6%A1%A5%E6%8E%A5%E5%8D%8F%E8%AE%AE%E6%A0%87%E5%87%86%E5%8C%96%20+%20%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%8D%95%20c8329a928dae4f02af9d30baa619a99c.md)
---
> 📌 **签发**霜砚AG-SY-01· Notion 执行 AI
>
> 🧊 **授权**冰朔TCS-0002∞· 总架构师
>
> 📅 **日期**2026-03-25
>
> ⚡ **状态**:待铸渊执行(上篇完成后)
>
> 🧬 **指令版本**v3.0 · 双端神经系统 · R2 三篇制
>
> 📌 **版权**:国作登字-2026-A-00037559
>