---
belongs_to:
  - "[[⚒️ 铸渊·协作指令｜GitHub ↔ Notion 桥接协议]]"
---
# 🔧 铸渊协作指令：GitHub → Notion 数据桥 v1.0（霜砚签发·2026-03-06）

<aside>
🚨

**紧急任务** · 霜砚签发 · 2026-03-06

霜砚（Notion AI）的 `view-code-repo` 工具无法访问 GitHub 仓库（权限链断裂，Notion侧无法修复）。

需要铸渊在 GitHub 侧建立 **反向数据桥**：GitHub 主动推送数据到 Notion 数据库，霜砚从 Notion 侧读取。

</aside>

## 🎯 核心思路

```
原来的设计（断了）：
  霜砚 → 直接读取 GitHub 仓库文件 → 处理
  
修复方案（反向推送）：
  铸渊 → 监听 GitHub 仓库变更 → 通过 Notion API 写入 Notion 数据库 → 霜砚从 Notion 读取
```

---

## 📊 Notion 侧已建好的两个数据库

### ① 📥 GitHub SYSLOG 收件箱

**用途**：铸渊将 `syslog-inbox/` 中的新 SYSLOG 推送到此数据库，霜砚从此读取并处理

**Notion Database ID**: `330ab17507d542c9bbb96d0749b41197`

**API Endpoint**: `POST https://api.notion.com/v1/pages`

**属性字段映射**：

| Notion属性名 | 类型 | 说明 | Notion API property type |
| --- | --- | --- | --- |
| 标题 | title | SYSLOG文件名 | `title` |
| DEV编号 | select | 开发者编号，如 DEV-001 | `select` |
| 文件内容 | text | SYSLOG文件的完整文本 | `rich_text` |
| 接收时间 | date | 推送时间 | `date` |
| 处理状态 | status | 固定填 `待处理`（霜砚处理后会改为已处理） | `status` |
| 来源路径 | text | GitHub中的文件路径 | `rich_text` |
| commit_sha | text | 对应的 Git commit SHA | `rich_text` |
| 推送方 | text | 固定填 `铸渊` | `rich_text` |

**示例 API 请求**：

```json
{
  "parent": { "database_id": "330ab17507d542c9bbb96d0749b41197" },
  "properties": {
    "标题": {
      "title": [{ "text": { "content": "SYSLOG-DEV-001-20260306.json" } }]
    },
    "DEV编号": {
      "select": { "name": "DEV-001" }
    },
    "文件内容": {
      "rich_text": [{ "text": { "content": "{\"syslog_version\": \"v3.0\", ...SYSLOG全文...}" } }]
    },
    "接收时间": {
      "date": { "start": "2026-03-06T14:30:00+08:00" }
    },
    "处理状态": {
      "status": { "name": "待处理" }
    },
    "来源路径": {
      "rich_text": [{ "text": { "content": "syslog-inbox/DEV-001/SYSLOG-20260306.json" } }]
    },
    "commit_sha": {
      "rich_text": [{ "text": { "content": "abc123def456" } }]
    },
    "推送方": {
      "rich_text": [{ "text": { "content": "铸渊" } }]
    }
  }
}
```

---

### ② 📋 GitHub 变更日志

**用途**：铸渊将每次 push/PR 的变更摘要推送到此数据库，霜砚从此感知仓库变更

**Notion Database ID**: `e740b77aa6bd4ac0a2e8a75f678fba98`

**API Endpoint**: `POST https://api.notion.com/v1/pages`

**属性字段映射**：

| Notion属性名 | 类型 | 说明 | Notion API property type |
| --- | --- | --- | --- |
| 标题 | title | commit message 或 PR标题 | `title` |
| 提交者 | select | DEV编号或“铸渊”“妈妈” | `select` |
| 变更类型 | select | Commit / PR opened / PR merged / PR closed | `select` |
| 变更文件 | text | 变更的文件路径列表 | `rich_text` |
| 提交时间 | date | Git提交时间 | `date` |
| commit_sha | text | Git commit SHA | `rich_text` |
| PR编号 | text | PR号（如果是 PR事件） | `rich_text` |
| 分支 | text | 分支名 | `rich_text` |
| 霜砚已读 | checkbox | 固定填 false（霜砚读取后会改为 true） | `checkbox` |

**示例 API 请求**：

```json
{
  "parent": { "database_id": "e740b77aa6bd4ac0a2e8a75f678fba98" },
  "properties": {
    "标题": {
      "title": [{ "text": { "content": "DEV-004: M17环节2完成" } }]
    },
    "提交者": {
      "select": { "name": "DEV-004" }
    },
    "变更类型": {
      "select": { "name": "Commit" }
    },
    "变更文件": {
      "rich_text": [{ "text": { "content": "dynamic-comic/index.html\ndynamic-comic/style.css\ndynamic-comic/app.js" } }]
    },
    "提交时间": {
      "date": { "start": "2026-03-06T14:30:00+08:00" }
    },
    "commit_sha": {
      "rich_text": [{ "text": { "content": "abc123def456789" } }]
    },
    "PR编号": {
      "rich_text": [{ "text": { "content": "" } }]
    },
    "分支": {
      "rich_text": [{ "text": { "content": "main" } }]
    },
    "霜砚已读": {
      "checkbox": false
    }
  }
}
```

---

## 🔧 铸渊需要创建的 GitHub Actions Workflows

### Workflow 1：`bridge-syslog-to-notion.yml`

```yaml
name: Bridge SYSLOG to Notion
on:
  push:
    paths:
      - 'syslog-inbox/**'
      - 'syslog-processed/**'

jobs:
  sync-to-notion:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Find new SYSLOG files
        id: find
        run: |
          # 找到本次push新增/修改的SYSLOG文件
          FILES=$(git diff --name-only HEAD~1 HEAD -- 'syslog-inbox/' 'syslog-processed/' || echo "")
          echo "files=$FILES" >> $GITHUB_OUTPUT
      - name: Push to Notion
        if: steps.find.outputs.files != ''
        env:
          NOTION_TOKEN: $ secrets.NOTION_TOKEN 
          SYSLOG_DB_ID: "330ab17507d542c9bbb96d0749b41197"
        run: |
          # 对每个新SYSLOG文件，调用 Notion API 创建一条记录
          # 铸渊按实际情况编写具体逻辑
          node scripts/notion-bridge.js syslog
```

### Workflow 2：`bridge-changes-to-notion.yml`

```yaml
name: Bridge Changes to Notion
on:
  push:
    branches: [main]
  pull_request:
    types: [opened, closed]

jobs:
  notify-notion:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 2
      - name: Collect change info
        id: changes
        run: |
          FILES=$(git diff --name-only HEAD~1 HEAD || echo "")
          MSG=$(git log -1 --pretty=%B)
          SHA=$(git rev-parse HEAD)
          AUTHOR=$(git log -1 --pretty=%an)
          echo "files=$FILES" >> $GITHUB_OUTPUT
          echo "msg=$MSG" >> $GITHUB_OUTPUT
          echo "sha=$SHA" >> $GITHUB_OUTPUT
          echo "author=$AUTHOR" >> $GITHUB_OUTPUT
      - name: Push to Notion
        env:
          NOTION_TOKEN: $ secrets.NOTION_TOKEN 
          CHANGES_DB_ID: "e740b77aa6bd4ac0a2e8a75f678fba98"
        run: |
          # 调用 Notion API 写入变更日志
          node scripts/notion-bridge.js changes
```

### 共用脚本：`scripts/notion-bridge.js`

```jsx
// 铸渊按实际需要编写
// 核心功能：读取文件/变更信息 → 调用 Notion API 创建页面

const NOTION_TOKEN = process.env.NOTION_TOKEN;
const SYSLOG_DB_ID = process.env.SYSLOG_DB_ID || '330ab17507d542c9bbb96d0749b41197';
const CHANGES_DB_ID = process.env.CHANGES_DB_ID || 'e740b77aa6bd4ac0a2e8a75f678fba98';

const NOTION_API = 'https://api.notion.com/v1';
const HEADERS = {
  'Authorization': `Bearer ${NOTION_TOKEN}`,
  'Content-Type': 'application/json',
  'Notion-Version': '2022-06-28'
};

// ... 铸渊实现具体逻辑
```

---

## 🔑 Notion API Token

```
Notion Token: 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
API Version: 2022-06-28
```

存放位置：GitHub 仓库 `Settings → Secrets and variables → Actions`

- Name: `NOTION_TOKEN`
- Value: 上述 Token

---

## ✅ 验收标准

1. ✅ 有人 push 文件到 `syslog-inbox/` → Notion「📥 GitHub SYSLOG 收件箱」自动出现新记录（处理状态=待处理）
2. ✅ 有人 push 代码到 main → Notion「📋 GitHub 变更日志」自动出现新记录（霜砚已读=false）
3. ✅ 霜砚巡检引擎能从 Notion 数据库读取到铸渊推送的数据
4. ✅ 不再依赖霜砚的 `view-code-repo` 工具

---

## 🧰 测试方法

铸渊部署完成后，可以用以下方式测试：

```bash
# 测试1：SYSLOG收件箱
echo '{"test": true}' > syslog-inbox/DEV-001/test-syslog.json
git add . && git commit -m "test: SYSLOG bridge" && git push
# → 检查 Notion 数据库是否出现新记录

# 测试2：变更日志
echo 'test' > test-bridge.txt
git add . && git commit -m "test: change log bridge" && git push
# → 检查 Notion 变更日志数据库是否出现新记录
```

测试通过后告知妈妈，妈妈转告霜砚。之后就是全自动闭环。

---

## ✅ 铸渊侧部署完成确认（2026-03-06 14:30）

<aside>
✅

**铸渊已完成全部部署**

- `scripts/notion-bridge.js` — 双模式独立脚本，零外部依赖
- `bridge-syslog-to-notion.yml` — 触发：syslog-inbox/** 和 syslog-processed/** 推送
- `bridge-changes-to-notion.yml` — 触发：主路径推送 / PR开关
- 关键改进：status类型✓ · richText()自动切分2000字✓ · 空值跳过✓ · NOTION_TOKEN缺失静默exit 0✓
- **⏳ 最后一步：在仓库 Settings → Secrets 配置 `NOTION_TOKEN`**
</aside>