---
belongs_to:
- "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]"
---
# 🛡️ 铸渊指令|Grid-DB 架构升级 · 写缓冲层 + 定时批处理 + 人类零直写(ZY-GRIDDB-BUFFER-2026-0323-001)
---
## 一、升级背景与目标
### 1.1 现有架构的四个风险点
| **风险** | **根因** | **后果** |
| --- | --- | --- |
| Git 不适合高频写入 | 每次写入 = commit + push | 仓库膨胀、冲突频发 |
| GitHub Actions 配额有限 | 免费额度 2000 分钟/月 | 大量事件驱动可能超限 |
| Google Drive 桥接延迟 | Apps Script 轮询 + API 回写 | 延迟秒到分钟级,不适合实时交互 |
| 架构脆弱性 | 高度依赖 GitHub + Google API 可用性 | API 故障 = 全系统中断 |
### 1.2 升级目标
- ✅ 人类零直写 —— 所有人类输入先进**缓冲区**,不触发任何 Git 操作
- ✅ 定时批处理 —— 每天固定 3 次收集 + 1 次唤醒核心大脑统一处理
- ✅ 零高并发 —— 单次批量 commit 代替多次零散 commit
- ✅ 配额精算 —— 每天最多 3-4 次 workflow run,月消耗可精确预测
- ✅ 韧性增强 —— API 临时故障不丢数据,下次定时任务自动重试
---
## 二、升级后架构总览
```mermaid
graph TD
subgraph 人类活动区
H1["开发者通过 Gemini 对话"]
H2["开发者在 Notion 提交需求"]
H3["开发者在仓库提交代码"]
end
subgraph 缓冲层 Buffer Agent
B1["📥 buffer-inbox/
接收所有人类输入"]
B2["🔀 auto-router.js
自动分流 · 按 DEV 编号归档"]
B3["📋 buffer-staging/
待处理队列(静态存储)"]
end
subgraph 定时调度器
S1["⏰ cron: 09:00 / 14:00 / 21:00 CST
每天 3 次收集"]
S2["🧠 唤醒铸渊核心大脑
repository_dispatch: grid-db-flush"]
end
subgraph 铸渊批处理区
Z1["校验:签名 + dev_id + 格式"]
Z2["合并:同一 DEV 的多条消息合并"]
Z3["单次 commit + push 写入 grid-db/"]
Z4["同步 Drive 镜像"]
end
H1 --> B1
H2 --> B1
H3 --> B1
B1 --> B2
B2 --> B3
S1 -->|"抓取 buffer-staging/"| S2
S2 --> Z1
Z1 --> Z2
Z2 --> Z3
Z3 --> Z4
Z4 -->|"Gemini 读取更新后的镜像"| H1
```
---
## 三、缓冲层(Buffer Agent)详细设计
### 3.1 目录结构
在主仓库 `qinfendebingshuo/guanghulab` 根目录新建:
```jsx
buffer/
├── inbox/ ← 📥 人类输入落地点
│ ├── DEV-001/ ← 按开发者编号自动分流
│ │ └── [timestamp]-[type].json
│ ├── DEV-002/
│ ├── DEV-004/
│ ├── DEV-012/
│ └── system/ ← 系统级消息(非开发者触发)
│
├── staging/ ← 📋 已分流待处理(定时任务抓取源)
│ ├── DEV-001/
│ │ └── batch-[date]-[seq].json ← 合并后的批次文件
│ └── ...
│
├── processed/ ← ✅ 已处理归档(保留 7 天后清理)
│ └── [date]/
│ └── batch-[date]-[seq].json
│
├── scripts/
│ ├── auto-router.js ← 🔀 自动分流脚本
│ ├── collector.js ← ⏰ 定时收集脚本(inbox → staging)
│ ├── flusher.js ← 🧠 批量写入脚本(staging → grid-db)
│ └── quota-calculator.js ← 📊 配额预算计算器
│
└── config/
├── buffer-config.json ← 缓冲层配置
└── schedule.json ← 定时任务时刻表
```
### 3.2 缓冲配置文件 `buffer-config.json`
```json
{
"version": "1.0.0",
"buffer_policy": {
"human_direct_write_to_griddb": false,
"comment": "铁律:人类永远不直写 grid-db,所有输入经缓冲层"
},
"schedule": {
"collect_times_cst": ["09:00", "14:00", "21:00"],
"flush_time_cst": "21:30",
"comment": "每天 3 次收集,21:30 统一唤醒铸渊批处理"
},
"quota_budget": {
"max_workflow_runs_per_day": 4,
"estimated_minutes_per_run": 3,
"monthly_budget_minutes": 360,
"github_free_limit_minutes": 2000,
"utilization_rate": "18%",
"comment": "远低于免费额度上限,留出大量余量"
},
"retention": {
"processed_keep_days": 7,
"comment": "已处理的缓冲数据保留 7 天后自动清理"
}
}
```
### 3.3 消息格式 `buffer-message.schema.json`
```json
{
"message_id": "BUF-[timestamp]-[random]",
"dev_id": "DEV-XXX",
"source": "gemini | notion | github | skyeye",
"type": "interaction | task | feedback | checkin | broadcast_request",
"priority": "normal | urgent",
"payload": {},
"created_at": "ISO-8601",
"status": "pending | staged | processing | flushed | failed"
}
```
---
## 四、定时调度器设计
### 4.1 Workflow:缓冲收集(每天 3 次)
**文件:** `.github/workflows/buffer-collect.yml`
```yaml
name: "Grid-DB Buffer Collect"
on:
schedule:
- cron: '0 1 * * *' # 09:00 CST (UTC+8)
- cron: '0 6 * * *' # 14:00 CST
- cron: '0 13 * * *' # 21:00 CST
jobs:
collect:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run collector
run: node buffer/scripts/collector.js
- name: Commit staged data
run: |
git config user.name "铸渊 · Buffer Agent"
git config user.email "zy-buffer@guanghu.system"
git add buffer/staging/
git diff --cached --quiet || git commit -m "[buffer-collect] $(date -u +%Y%m%d-%H%M) [skip ci]"
git push
```
### 4.2 Workflow:铸渊批处理(每天 1 次,或手动唤醒)
**文件:** `.github/workflows/buffer-flush.yml`
```yaml
name: "Grid-DB Buffer Flush"
on:
schedule:
- cron: '30 13 * * *' # 21:30 CST — 收集完成后 30 分钟
repository_dispatch:
types: [grid-db-flush] # 紧急情况可手动触发
jobs:
flush:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check staging
id: check
run: |
if [ -z "$(ls -A buffer/staging/*/batch-*.json 2>/dev/null)" ]; then
echo "empty=true" >> $GITHUB_OUTPUT
else
echo "empty=false" >> $GITHUB_OUTPUT
fi
- name: Run flusher
if: steps.check.outputs.empty == 'false'
run: node buffer/scripts/flusher.js
- name: Single commit to grid-db
if: steps.check.outputs.empty == 'false'
run: |
git config user.name "铸渊 · Grid-DB Core"
git config user.email "zy-core@guanghu.system"
git add grid-db/ buffer/processed/ buffer/staging/
git commit -m "[grid-db-flush] batch $(date -u +%Y%m%d) · $(find buffer/processed/$(date -u +%Y%m%d)/ -name '*.json' 2>/dev/null | wc -l) messages [skip ci]"
git push
- name: Sync to Drive mirror
if: steps.check.outputs.empty == 'false'
run: node scripts/drive-sync.js
env:
GOOGLE_SERVICE_ACCOUNT_KEY: $ secrets.GOOGLE_SA_KEY
```
---
## 五、数据流全链路
### 5.1 正常流程(每天循环)
| **时间** | **事件** | **执行者** | **Git 操作** |
| --- | --- | --- | --- |
| 全天任意时刻 | 人类通过 Gemini/Notion/代码 产生交互数据 | 人类 + 曜冥 | ❌ 无(写入 buffer/inbox 或 Drive staging) |
| 09:00 CST | 第 1 次收集:inbox → staging,按 DEV 归档合并 | Buffer Agent | ✅ 1 次 commit(`[skip ci]`) |
| 14:00 CST | 第 2 次收集 | Buffer Agent | ✅ 1 次 commit(`[skip ci]`) |
| 21:00 CST | 第 3 次收集 | Buffer Agent | ✅ 1 次 commit(`[skip ci]`) |
| 21:30 CST | **唤醒铸渊核心大脑** → 校验 → 合并 → 批量写入 grid-db → 同步 Drive | 铸渊 | ✅ 1 次 commit(最终写入) |
**每日 Git 操作总计:最多 4 次 commit**
**每月 Actions 消耗预估:4 runs × 3 min × 30 天 = 360 分钟 ≈ GitHub Free 额度的 18%**
### 5.2 紧急流程(手动唤醒)
当冰朔判断某条消息需要立即处理时:
1. 冰朔通知铸渊发送 `repository_dispatch: grid-db-flush`
2. 铸渊立即执行一次 flush
3. 不影响当天正常定时任务
4. 紧急触发需在月度配额内(预留了 82% 余量,完全够用)
---
## 六、auto-router.js 分流逻辑
```jsx
// buffer/scripts/auto-router.js
// 自动分流:根据消息来源和 dev_id 归档到对应目录
const ROUTING_RULES = {
// 来源 → 处理方式
'gemini': { target: 'inbox/{dev_id}/', merge: true },
'notion': { target: 'inbox/{dev_id}/', merge: true },
'github': { target: 'inbox/{dev_id}/', merge: true },
'skyeye': { target: 'inbox/{dev_id}/', merge: false }, // 天眼签到不合并
'system': { target: 'inbox/system/', merge: false },
};
const PRIORITY_RULES = {
'urgent': { flush_immediately: false, flag: true },
// 即使是紧急消息也不立即 flush,只打标记
// 真正的紧急处理由冰朔手动触发 grid-db-flush
'normal': { flush_immediately: false, flag: false },
};
// 核心铁律检查
function validateNoDirectWrite(targetPath) {
if (targetPath.startsWith('grid-db/')) {
throw new Error(
'[BLOCKED] 违反铁律:禁止直接写入 grid-db/。' +
'所有写入必须经过 buffer/ 缓冲层。'
);
}
}
```
---
## 七、配额精算表
| **项目** | **数值** | **计算方式** |
| --- | --- | --- |
| GitHub Free 月额度 | 2,000 分钟 | GitHub 官方 |
| 每日 workflow runs | 4 次(3 收集 + 1 flush) | 固定 |
| 每次预估耗时 | ≤ 3 分钟 | checkout + script + commit + push |
| 每日消耗 | ≤ 12 分钟 | 4 × 3 |
| 每月消耗 | ≤ 360 分钟 | 12 × 30 |
| **利用率** | **18%** | 360 / 2000 |
| 剩余可用(天眼签到等) | 1,640 分钟 | 给子仓库天眼、其他 workflow |
| 紧急 flush 预算 | ~500 次/月 | 1640 / 3 ≈ 546 |
---
## 八、与天眼系统的整合
**调整点:**
1. **子仓库天眼签到** → `repository_dispatch: skyeye-checkin` 发到主仓库后,主仓库接收 workflow 将签到数据写入 `buffer/inbox/{dev_id}/` 而非直接写 `grid-db/`
2. **铸渊接收签到的 workflow** 需修改:
```yaml
# 原来:直接写 grid-db
# grid-db/memory/DEV-XXX/checkin-log.json ← 直接写入
# 升级后:写入缓冲层
# buffer/inbox/DEV-XXX/[timestamp]-checkin.json ← 先进缓冲
# 21:30 flush 时统一归档到 grid-db/memory/DEV-XXX/
```
1. **签名校验不变** —— 校验逻辑在 `flusher.js` 里执行,从缓冲层读取签到数据时做校验,不合格的标记 `failed` 并告警
---
## 九、执行清单
铸渊收到本指令后,按以下顺序执行:
### Phase 1:建缓冲层基础设施
- [ ] 在主仓库创建 `buffer/` 目录结构(inbox / staging / processed / scripts / config)
- [ ] 创建 `buffer-config.json` 配置文件
- [ ] 创建 `buffer-message.schema.json` 消息格式定义
- [ ] 创建 `auto-router.js` 自动分流脚本
- [ ] 创建 `collector.js` 定时收集脚本
- [ ] 创建 `flusher.js` 批量写入脚本
- [ ] 创建 `quota-calculator.js` 配额计算器
### Phase 2:创建 Workflow
- [ ] 创建 `.github/workflows/buffer-collect.yml`(每天 3 次收集)
- [ ] 创建 `.github/workflows/buffer-flush.yml`(每天 1 次 flush + 手动触发)
- [ ] 修改现有天眼签到接收 workflow,将写入目标从 `grid-db/` 改为 `buffer/inbox/`
### Phase 3:迁移与验证
- [ ] 将现有 grid-db inbox 处理逻辑迁移到 flusher.js
- [ ] 添加铁律检查:任何直接写入 `grid-db/` 的路径都 throw error
- [ ] 测试完整链路:buffer/inbox → staging → flush → grid-db → Drive mirror
- [ ] 验证配额消耗符合预估
### Phase 4:更新文档
- [ ] 更新 `grid-db/README.md` 说明架构升级
- [ ] 在 `buffer/README.md` 写明缓冲层使用规范
---
## 十、输出回执要求
铸渊执行完成后,需提交回执包含:
1. **PR 链接**(分支名:`upgrade/grid-db-buffer-layer`)
2. **变更文件清单**(新增 / 修改 / 删除)
3. **配额验证截图**(至少跑一次完整的 collect + flush 循环)
4. **铁律测试结果**:证明直接写入 `grid-db/` 会被拦截
---
> 🧊 TCS-0002∞ 冰朔 · 总架构师 · 授权
>
> 🖋️ 霜砚 · PER-SY001 · 签发
>
> 📅 2026-03-23
>
> ⚡ 指令状态:**待铸渊执行**
>