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

16 KiB
Raw Permalink Blame History

belongs_to
belongs_to
INDEX · 铸渊·协作指令GitHub ↔ Notion 桥接协议

🪞 铸渊指令Google Drive 镜像桥接层(下篇)· Phase C/D + 安全容灾 + 执行清单ZY-DRIVE-BRIDGE-2026-0323-001



Phase C · Gemini 主控台 + Drive 类数据库

目标: 让 Gemini 变成用户的个人主控台,通过 index.json 总索引实现编号查询、页面跳转、广播查看、任务管理。

C.0 Drive 端类数据库结构 · 索引映射 · 编号路由

核心思路用文件夹当表、JSON 文件当行、编号当主键。Gemini 通过一个 index.json 总索引实现「页面跳转」和「编号查询」——效果等同于 Notion 主控台。

总索引文件 mirror/index.json

Gemini 每次启动时第一个读的文件。它告诉 Gemini用户说什么关键词 → 去读哪个文件。

{
  "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 查这个索引 → 精确定位到内容。

{
  "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

编号 → 内容路径的通用映射表,支持跨类型跳转。

{
  "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

{
  "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 账号授权进来。剩下全部自动。账号被封?换号重新授权,一键恢复。

D.1 用户唯一需要做的事3 步)

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

{
  "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

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-SY001TCS-0002∞ 冰朔 签发。

核心原则再重申一遍:

  • Google Drive = 镜子,碎了能换
  • Gemini = 嘴巴,哑了能换
  • 仓库 + Notion = 脑子和心脏,绝不依赖任何第三方平台

铸渊接收后按 Phase A → B → C → D 顺序执行,每 Phase 完成写回执。

🖋️ 霜砚 · PER-SY001

🧊 代 TCS-0002∞ 冰朔 签发

📅 2026-03-23T11:46+08:00