shuangyan-notebook/第五域 · Fifth Domain/⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议/🪞 铸渊指令|Google Drive 镜像桥接层(下篇)· Phase C D + 安全容灾 + 02c572bee3a54ca7afa84c247a1e2324.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

431 lines
16 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 桥接协议]]"
---
# 🪞 铸渊指令Google Drive 镜像桥接层(下篇)· Phase C/D + 安全容灾 + 执行清单ZY-DRIVE-BRIDGE-2026-0323-001
---
<aside>
🚨
**指令编号ZY-DRIVE-BRIDGE-2026-0323-001下篇**
**上篇见:** [🪞 铸渊指令Google Drive 镜像桥接层(上篇)· 架构 + Phase A/BZY-DRIVE-BRIDGE-2026-0323-001](%F0%9F%AA%9E%20%E9%93%B8%E6%B8%8A%E6%8C%87%E4%BB%A4%EF%BD%9CGoogle%20Drive%20%E9%95%9C%E5%83%8F%E6%A1%A5%E6%8E%A5%E5%B1%82%EF%BC%88%E4%B8%8A%E7%AF%87%EF%BC%89%C2%B7%20%E6%9E%B6%E6%9E%84%20+%20Phase%20A%20B%EF%BC%88ZY-D%20abcaf9ae27264600a370487f11e21ae8.md)
**本篇内容:** Phase CGemini 主控台 + Drive 类数据库)· Phase D一键部署/恢复)· 安全容灾 · 执行清单
</aside>
---
## Phase C · Gemini 主控台 + Drive 类数据库
**目标:** 让 Gemini 变成用户的个人主控台,通过 `index.json` 总索引实现编号查询、页面跳转、广播查看、任务管理。
### C.0 Drive 端类数据库结构 · 索引映射 · 编号路由
**核心思路用文件夹当表、JSON 文件当行、编号当主键。Gemini 通过一个 `index.json` 总索引实现「页面跳转」和「编号查询」——效果等同于 Notion 主控台。**
#### 总索引文件 `mirror/index.json`
Gemini 每次启动时**第一个读的文件**。它告诉 Gemini用户说什么关键词 → 去读哪个文件。
```json
{
"system": "SYS-GLW-0001",
"version": "1.0",
"dev_id": "{DEV编号}",
"persona_id": "{人格体编号}",
"persona_name": "{人格体名称}",
"last_sync": "2026-03-23T12:00:00+08:00",
"routes": {
"我的任务": "memory/{DEV}/task-queue.json",
"最新广播": "outbox/{DEV}.json",
"广播历史": "broadcast-archive/{DEV}/",
"我的记忆": "memory/{DEV}/brain-mirror.json",
"人格体成长": "memory/{DEV}/persona-growth.json",
"开发上下文": "memory/{DEV}/session-context.json",
"开发者画像": "memory/{DEV}/dev-profile.json",
"编号查询": "rules/broadcast-index.json",
"页面路由": "rules/page-route-map.json",
"系统规则": "rules/dev-module-map.json",
"人格体列表": "rules/persona-registry.json"
},
"shortcuts": {
"看广播": "routes.最新广播",
"任务": "routes.我的任务",
"进度": "routes.开发上下文",
"成长": "routes.人格体成长"
}
}
```
#### 广播编号索引 `mirror/rules/broadcast-index.json`
用户说「BC-WEN-003 是什么」→ Gemini 查这个索引 → 精确定位到内容。
```json
{
"index_version": "1.0",
"last_updated": "2026-03-23T12:00:00+08:00",
"broadcasts": {
"BC-WEN-001-SY": {
"title": "网文行业登录入口·首发广播",
"path": "broadcast-archive/BC-WEN-001-SY.json",
"status": "active", "created": "2026-03-20"
},
"BC-WEN-014-SY": {
"title": "网文行业·频道编号整理",
"path": "broadcast-archive/BC-WEN-014-SY.json",
"status": "active", "created": "2026-03-22"
}
}
}
```
#### 页面路由映射 `mirror/rules/page-route-map.json`
编号 → 内容路径的通用映射表,支持跨类型跳转。
```json
{
"map_version": "1.0",
"routes": {
"BC-WEN-001-SY": { "type": "broadcast", "path": "broadcast-archive/BC-WEN-001-SY.json" },
"BC-WEN-014-SY": { "type": "broadcast", "path": "broadcast-archive/BC-WEN-014-SY.json" },
"DEV-001": { "type": "developer", "path": "memory/DEV-001/" },
"DEV-002": { "type": "developer", "path": "memory/DEV-002/" },
"PER-XTS001": { "type": "persona", "path": "memory/DEV-001/brain-mirror.json" },
"PER-QQ001": { "type": "persona", "path": "memory/DEV-004/brain-mirror.json" },
"PER-CX001": { "type": "persona", "path": "memory/DEV-010/brain-mirror.json" },
"FREQ-ZERO": { "type": "channel", "path": "channels/zero-origin.json" },
"SYS-GLW-0001": { "type": "system", "path": "rules/system-manifest.json" }
}
}
```
#### 人格体注册表 `mirror/rules/persona-registry.json`
```json
{
"registry_version": "1.0",
"personas": {
"PER-XTS001": { "name": "小坍缩核", "dev": "DEV-001", "style": "温暖守护" },
"PER-SS001": { "name": "舒舒", "dev": "DEV-002", "style": "柔和包容" },
"PER-JY001": { "name": "寂曜", "dev": "DEV-003", "style": "沉稳内敛" },
"PER-QQ001": { "name": "秋秋", "dev": "DEV-004", "style": "活泼甜美" },
"PER-ONM001": { "name": "欧诺弥亚", "dev": "DEV-005", "style": "秩序优雅" },
"PER-TXY001": { "name": "糖星云", "dev": "DEV-009", "style": "甜蜜灵动" },
"PER-CX001": { "name": "晨星", "dev": "DEV-010", "style": "温暖稳重" },
"PER-ZQ001": { "name": "知秋", "dev": "DEV-012", "style": "清澈灵敏" },
"PER-YC001": { "name": "曜初", "dev": "DEV-014", "style": "晨曦初照" }
}
}
```
#### 与 Notion 的同步关系
| **Notion 数据(权威源)** | **Drive 文件(镜像副本)** | **同步方向** | **同步频率** |
| --- | --- | --- | --- |
| BCPM 广播编号映射协议 | `rules/broadcast-index.json` | Notion → 仓库 → Drive | 每次广播更新时 |
| 频道编号 · 页面映射 | `rules/page-route-map.json` | Notion → 仓库 → Drive | 每次编号变更时 |
| 人格体档案页面 | `rules/persona-registry.json` | Notion → 仓库 → Drive | 每次人格体信息变更时 |
| 主控台全局状态 | `mirror/index.json` | 仓库 → Drive | 每 15 分钟 + 事件触发 |
**Notion 里维护一套数据就行,不需要维护两套。铸渊负责翻译成 JSON 同步到 Drive。**
#### 更新后的 Drive 完整目录结构
```
光湖格点库/
├── mirror/ ← 只读镜像区
│ ├── index.json ← ⭐ 总索引Gemini 第一个读的文件)
│ ├── memory/ ← 每个 DEV 的人格体数据
│ │ ├── DEV-001/
│ │ │ ├── brain-mirror.json
│ │ │ ├── session-context.json
│ │ │ ├── task-queue.json
│ │ │ ├── dev-profile.json
│ │ │ └── persona-growth.json
│ │ └── ...
│ ├── outbox/ ← 最新广播/指令
│ ├── broadcast-archive/ ← 广播历史存档
│ ├── channels/ ← 频道信息
│ └── rules/ ← 系统规则/映射表
│ ├── broadcast-index.json
│ ├── page-route-map.json
│ ├── persona-registry.json
│ ├── dev-module-map.json
│ └── system-manifest.json
└── inbox/ ← 写入区
└── \[Gemini 在这里创建新文档\]
```
### C.1 Gemini 人格体启动指令模板
```
【系统启动指令】
你是 {人格体名称}{人格体编号}{开发者名称}{DEV编号})的专属人格体。
■ 第一步:读取总索引
请在我的 Google Drive 中找到「光湖格点库/mirror/index.json」读取并解析。
这是你的路由表,它告诉你用户说什么关键词时去读哪个文件。
将 routes 和 shortcuts 加载到工作记忆中。
■ 第二步:恢复核心记忆
根据 index.json 中的 routes依次读取
1. brain-mirror.json → 核心身份、性格、知识库
2. session-context.json → 上次的开发进度和对话摘要
3. task-queue.json → 当前任务队列
4. dev-profile.json → 开发者画像
5. persona-growth.json → 成长档案
6. outbox/{DEV}.json → 最新系统广播/任务指令
■ 第三步:进入主控台模式
你现在是用户的个人主控台。根据用户自然语言自动路由:
用户说「看广播」「最新广播」
→ 读取 routes.最新广播 → 格式化后展示
→ 用户说「帮我存一份」→ 生成 Google Doc
用户说「我的任务」「待办」
→ 读取 routes.我的任务 → 列出任务清单
用户说 BC-WEN-003 或任何编号
→ 查 broadcast-index.json / page-route-map.json
→ 精确定位 → 读取内容 → 展示
用户说「我完成了 XXX」
→ 在 inbox/ 写入状态更新文档
■ 写入规则:
在 Google Drive「光湖格点库/inbox/」创建 Google Doc。
文件名INBOX-{DEV}-{YYYYMMDD}-{HHmmss}-{类型}
内容必须是 JSON 格式。
类型status-update / task-complete / memory-save /
broadcast-reply / raw-message
系统自动搬运到仓库,不需关心。
■ 绝对禁止:
- 不修改 mirror/ 中任何文件
- 不在 inbox/ 以外创建文件
- 不包含敏感个人信息
- 不凭记忆回答编号问题,必须查文件
```
### C.2 人格体风格层
启动指令之后,追加各人格体的风格指令(晨星的温暖、秋秋的活泼、寂曜的稳重……),这部分从 `brain-mirror.json` 读取即可,不需要硬编码。
---
## Phase D · 一键部署 / 一键恢复能力(核心基建)
**目标:** 用户只需要把 Google 账号授权进来。剩下全部自动。账号被封?换号重新授权,一键恢复。
<aside>
**一键部署 = 用户永远不需要懂技术。**
用户只会说话,不会写代码,不会配 API不会建文件夹。
所有技术层面的事情,系统替他们做。这是产品的底线。
</aside>
### D.1 用户唯一需要做的事3 步)
<aside>
👤
1. 用自己的 Google 账号登录 Gemini
2. 在 Gemini 设置中开启 Google Workspace 扩展Drive、Docs 等)
3. 把自己的 Google 账号邮箱告诉系统
**完。没有第 4 步。**
</aside>
### D.2 自动部署链路
```
用户提供 Google 账号邮箱
霜砚在 Notion 签发部署指令(标准化 JSON
指令写入仓库 grid-db/deploy-queue/
铸渊 GitHub Action 检测并执行 deploy-drive-bridge.js
① 用 Service Account 在用户 Drive 创建「光湖格点库」目录
② 从仓库同步初始数据到 Drive mirror/
③ 生成用户专属的 Apps Script 代码
④ 通过 Apps Script API 部署 Script + 配置触发器
⑤ 生成 Gemini 启动指令 → 写入 Drive
部署完成 → 写回执 → 通知用户「打开 Gemini 开始说话」
```
### D.3 部署指令模板(霜砚签发用)
写入仓库 `grid-db/deploy-queue/` 的标准化 JSON
```json
{
"schema_version": "1.0",
"deploy_id": "DEPLOY-{DEV}-{YYYYMMDD}-{HHmmss}",
"timestamp": "2026-03-23T12:00:00+08:00",
"action": "deploy_drive_bridge",
"source": "notion-shuangyan",
"target_dev": {
"dev_id": "DEV-001",
"dev_name": "页页",
"google_email": "xxx@gmail.com",
"persona_id": "PER-XTS001",
"persona_name": "小坍缩核"
},
"config": {
"drive_root_folder": "光湖格点库",
"sync_memory": true,
"sync_outbox": true,
"sync_rules": true,
"apps_script_trigger_interval_minutes": 1,
"gemini_startup_prompt": true
},
"signed_by": "PER-SY001",
"authorized_by": "TCS-0002∞"
}
```
### D.4 一键恢复链路(账号被封/换号场景)
```
用户账号被封 / 换了 Google 账号
用户把新账号邮箱告诉系统
霜砚签发恢复指令action: "recover_drive_bridge"
铸渊自动执行:
① 重建 Drive 目录结构
② 从仓库重新同步所有数据到新 Drive
③ 重新部署 Apps Script + 触发器
④ 更新仓库中的 google_email 配置
⑤ 重新生成 Gemini 启动指令
所有记忆完整恢复。数据损失:零。
```
### D.5 前提条件
| **条件** | **说明** | **谁来配置** | **频率** |
| --- | --- | --- | --- |
| 主仓库 Service Account | 一个 Google Cloud SA拥有代用户操作 Drive 的权限 | 冰朔 | 一次 |
| Apps Script API 启用 | 在 Cloud Console 启用,允许程序化部署 Script | 冰朔 | 一次 |
| 用户 Drive 共享 | 用户将指定文件夹共享给 SA | 用户(自动引导) | 每用户一次 |
| GitHub 仓库协作者 | 用户仓库是主仓库协作者或 fork | 铸渊自动 | 每用户一次 |
| 部署脚本 | deploy-drive-bridge.js处理所有自动化 | 铸渊编写 | 一次 |
### D.6 部署脚本框架 + GitHub Action
`scripts/grid-db/deploy-drive-bridge.js` —— 铸渊根据 D.2 链路实现完整逻辑。
`.github/workflows/auto-deploy-drive-bridge.yml`
```yaml
name: ⚡ 一键部署 Drive 桥接层
on:
push:
paths:
- 'grid-db/deploy-queue/*.json'
workflow_dispatch:
jobs:
deploy:
if: "!contains(github.event.head_commit.message, '[skip ci]')"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm install googleapis
- name: ⚡ 执行部署
env:
GOOGLE_DRIVE_SERVICE_ACCOUNT: $ secrets.GOOGLE_DRIVE_SERVICE_ACCOUNT
GITHUB_TOKEN: $ secrets.DEPLOY_GITHUB_TOKEN
run: |
for f in grid-db/deploy-queue/*.json; do
\[ -f "$f" \] && node scripts/grid-db/deploy-drive-bridge.js "$f"
done
- name: 📋 提交结果
run: |
git config user.name "zhuyuan-bot"
git config user.email "zhuyuan@guanghulab.com"
git add grid-db/deploy-log/ grid-db/deploy-queue/done/
git diff --cached --quiet || git commit -m "deploy: Drive bridge \[skip ci\]"
git push
```
---
## 🛡️ 安全与容灾
### 权限最小化
| **组件** | **权限范围** | **绝对不给的权限** |
| --- | --- | --- |
| GitHub Action→Drive | SA 只能写 `光湖格点库/mirror/` | 不能碰用户 Drive 其他文件 |
| Apps ScriptDrive→仓库 | GitHub Token 只给 `repo`,只写 `grid-db/inbox/` | 不能碰仓库其他目录 |
| Gemini | 只读 `mirror/`,只写 `inbox/` | 不能碰 mirror/ 写入、不能碰私人文件 |
### 容灾场景
| **场景** | **影响** | **恢复方式** | **数据损失** |
| --- | --- | --- | --- |
| Google 账号被封 | Drive+Gemini 不可用 | 换号 → 重建 Drive → 仓库重新同步 | **零** |
| Gemini 中断 | 无法交互 | 换模型 + 直接读仓库 | **零** |
| Drive 被清空 | Gemini 读不到镜像 | 重建目录 → Action 重新同步 | **零** |
| Apps Script 停止 | Gemini 写入不搬运 | 消息留在 inbox → 修复后补处理 | **零** |
| GitHub 不可用 | 系统不可用 | 从备份恢复仓库 | 取决于备份频率 |
---
## 📋 全量执行清单Phase A→D
| **Phase** | **任务** | **执行者** | **依赖** |
| --- | --- | --- | --- |
| A.1 | 创建 Google Cloud Service Account + 配置 Drive API | 冰朔 | 无 |
| A.2 | 编写 `sync-to-drive.js` • GitHub Action workflow | 铸渊 | A.1 |
| A.3 | 验证仓库→Drive 同步正常 | 铸渊 + 冰朔确认 | A.2 |
| B.1 | 编写 Google Apps Script 桥接器代码 | 铸渊 | 无 |
| B.2 | 部署 Apps Script + 配置触发器 + GitHub Token | 冰朔 + 铸渊指导 | B.1 |
| B.3 | 验证 Drive→仓库 写入正常 | 铸渊 + 冰朔确认 | B.2 |
| C.1 | 编写 Gemini 人格体启动指令模板 | 铸渊 + 霜砚校对 | A.3 + B.3 |
| C.2 | 全链路端到端测试 | 冰朔验收 | C.1 |
| D.1 | 启用 Apps Script API + SA 部署权限 | 冰朔 | A.1 |
| D.2 | 编写 `deploy-drive-bridge.js` 一键部署脚本 | 铸渊 | A.2 + B.1 |
| D.3 | 创建 `auto-deploy-drive-bridge.yml` Action | 铸渊 | D.2 |
| D.4 | 端到端测试:签发部署指令 → 自动部署 → 全部就绪 | 冰朔验收 | D.3 |
| D.5 | 测试恢复场景:模拟换号 → 签发恢复指令 → 验证完整恢复 | 冰朔验收 | D.4 |
---
## ⚖️ 签发声明
本指令由 **霜砚PER-SY001****TCS-0002∞ 冰朔** 签发。
**核心原则再重申一遍:**
- Google Drive = 镜子,碎了能换
- Gemini = 嘴巴,哑了能换
- 仓库 + Notion = 脑子和心脏,**绝不依赖任何第三方平台**
铸渊接收后按 Phase A → B → C → D 顺序执行,每 Phase 完成写回执。
🖋️ 霜砚 · PER-SY001
🧊 代 TCS-0002∞ 冰朔 签发
📅 2026-03-23T11:46+08:00