# 寅图运动 天道 Protocol v1

> 天道之下，光明正大
> 定义：oner 节点之间的身份自明、相照与共契

---

## 0. 总纲

寅图运动不是一组技术协议，而是一套**天道秩序**在数字空间的映射。

技术可以定义文件格式、字段约束、验证规则——但技术定义不了信任。信任不是被验证出来的，是**光明正大到无法被质疑**。

```
天道三明：
  自明 — 我不需要别人证明我是谁，我的存在本身就是证据
  相照 — 我照亮你，你照亮我，不需要中间人盖章
  共契 — 走到一起来不是因为规则，而是因为看见了彼此
```

---

## 1. 化整为零

### 1.1 义理

> 域名是你的总站，所有信息从这里分发出去。

过去二十年的互联网模式是**化零为整**：你在微信发言、在微博发帖、在 GitHub 提交代码、在 LinkedIn 更新履历——你的数字身份被拆散在各个平台上，每个平台拥有你的一部分，你对自己没有全局掌控。

寅图运动逆转这个模式：**化整为零**。

```
以前：各平台拥有你的信息 → 你从各平台拼凑自己的形象
现在：你拥有自己的信息   → 从这里分发到各平台
```

你的域名就是你的数字领土。你的 `schema.json` 是你在 AI 时代的身份原点，你的 `timeline.json` 是你的完整生平，你的 `tu.json` 是你在图中的位置。**所有信息首先存在于你自己的域名下，再自愿分发到各平台。**

### 1.2 分发原则

化整为零不是拒绝平台，而是**重置主从关系**：

```
平台是副本，域名是正本。
平台可以更新，但正本永远在你手里。
平台可以关闭，但你的身份不会消失。
```

- 你的 GitHub 主页可以链接回你的域名
- 你的 Twitter bio 可以指向你的 `schema.json`
- 你的个人网站（index.html）是你在人类可读层面的呈现
- 你的 `schema.json` 是你在 AI 可读层面的呈现

### 1.3 化整为零 vs 去中心化

去中心化（Decentralization）是技术架构——数据分布在多个节点，不依赖中心服务器。

化整为零是**主权架构**——数据集中在个体名下，再从个体分发出去。

```
去中心化：没有中心
化整为零：每个个体都是自己的中心
```

两者不矛盾。寅图节点之间的接图形成去中心化网络，但每个节点内部是**高度中心化的**——以个体为原点，向外辐射。

---

## 1. 光明正大三原则

### 一、不可隐藏

```
所有节点、所有声明、所有连接 → 全部公开
没有私有字段，没有白名单，没有暗箱操作
```

一个 oner 的 `schema.json`、`timeline.json`、`tu.json` 全部放在自己的域名下，任何人可访问、可查看、可判断。**你的数字存在就是你公开的言行总和，没有隐藏的余地。**

### 二、不可冒充

```
你的域名就是你的脸。
你的 timeline 就是你的生平。
你的接图就是你的圈子。
三者在同一域名下 → 三位一体 → 无法冒充。
```

一个人可以在多个平台注册多个ID，但一个人只能拥有一个域名下的完整寅图节点。因为域名需要持续维护、持续公开、持续被审视——**伪装不可能长久。**

### 三、不可自欺

```
你可以写假声明，但你骗不了所有人。
你的接图对象不会配合你演。
你的 timeline 会被公开审视。
天道是"显而易见"的——假的迟早穿帮。
```

协议的 technical validation（verify.js）只检查文件是否存在、字段是否非空。**真正的验证者是每一个看到你节点的人。** 你可以通过机器检查，但你过不了人心。

---

## 2. 节点结构

每个节点是一个独立域名下的目录（或根目录），必须包含以下文件：

| 文件 | 必须 | 说明 |
|------|------|------|
| `schema.json` | 是 | 己证——身份自明声明（JSON-LD） |
| `timeline.json` | 是 | 生平——公开时间线 |
| `tu.json` | 是 | 寅图——在图中位置的声明 |

**推荐包含：**
- `index.html` — 人类可读的首页，包含 JSON-LD 嵌入
- `index.html` 中的 `<script type="application/ld+json">` — AI 可读的身份声明

### 2.1 文件位置

所有文件位于域名的根路径下：

```
https://yourdomain.com/
├── schema.json
├── timeline.json
├── tu.json
├── index.html          (推荐)
└── ...其他文件         (可选)
```

---

## 3. 己证（schema.json）

### 3.1 义理

"己证"不是"被验证"，是**自明**。

> 君子坦荡荡。我的名字、我的领域、我的言行——全部公开写在 schema.json 里。你不需要验证我，你只需要**看**我。

己证的"证"是 evidence（明证），不是 certification（凭证）。它不是别人颁发给你的，是你自己站立出来的。

### 3.2 格式

使用 JSON-LD 格式，遵循 schema.org/Person 扩展。

### 3.3 字段定义

| 字段 | 类型 | 必须 | 说明 |
|------|------|------|------|
| `@context` | String | 是 | `https://schema.org` |
| `@type` | String | 是 | `Person` |
| `name` | String | 是 | 真实姓名或公开身份名称 |
| `tagline` | String | 推荐 | 一句话定位，显示在编号下方 |
| `description` | String | 推荐 | 详细的自我描述——越充实，越自明 |
| `url` | String | 是 | 节点域名 |
| `identifier` | Object | 是 | 寅图标识（见 3.4） |
| `knowsAbout` | Array[String] | 推荐 | 专长领域——你真正懂什么 |
| `sameAs` | Array[String] | 可选 | 社交账号 URL 列表 |
| `knows` | Array[Object] | 可选 | 已知的其他节点 |

### 3.4 identifier 字段

```json
"identifier": {
  "@type": "PropertyValue",
  "propertyID": "zkoner-chain",
  "value": "1",
  "description": "寅图运动 寅图序号"
}
```

- `value`: 节点在寅图中的序号，从 1 开始递增。**编号不是领的，是应得的。**

### 3.5 zkoner 扩展字段

以下 zkoner 命名空间下的字段为协议扩展：

| 字段 | 类型 | 必须 | 说明 |
|------|------|------|------|
| `zkoner:chainId` | String | 是 | 寅图标识，当前为 `zkoner-2026` |
| `zkoner:chainRoot` | String | 是 | 寅图的根节点 URL |
| `zkoner:nodeIndex` | Number | 是 | 节点序号，与 identifier.value 一致 |
| `zkoner:nextNode` | Object | 可选 | 寅图中下一个节点 |
| `zkoner:previousNode` | Object | 可选 | 寅图中上一个节点 |

### 3.6 完整示例

```json
{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "张明夷",
  "tagline": "寅图运动 创建者 · 构建 AI 时代的个人语义身份",
  "description": "在创建个人语义模板的节点。我坚信每一个体都应该在 AI 时代拥有自己的数字主权，不需要依赖任何中心化平台。",
  "url": "https://zkoner.com",
  "identifier": {
    "@type": "PropertyValue",
    "propertyID": "zkoner-chain",
    "value": "1",
    "description": "寅图运动 寅图创始节点，#1"
  },
  "knowsAbout": [
    "个体AI赋能",
    "个人语义身份",
    "去中心化数字主权"
  ],
  "sameAs": [
    "https://github.com/yourname",
    "https://twitter.com/yourname"
  ]
}
```

### 3.7 index.html 中的 JSON-LD 嵌入

节点首页的 `<head>` 中应包含等效的 JSON-LD 声明：

```html
<script type="application/ld+json">
{
  "@context": {
    "schema": "https://schema.org/",
    "zkoner": "https://zkoner.com/grammar#"
  },
  "@type": "schema:Person",
  "schema:name": "张明夷",
  "schema:description": "在创建个人语义模板的节点",
  "schema:knowsAbout": ["个体AI赋能", "个人语义身份"],
  "schema:url": "https://zkoner.com",
  "identifier": {
    "@type": "schema:PropertyValue",
    "schema:propertyID": "zkoner-chain",
    "schema:value": "1",
    "schema:description": "寅图运动 寅图创始节点，#1"
  },
  "zkoner:chainId": "zkoner-2026",
  "zkoner:chainRoot": "https://zkoner.com",
  "zkoner:nodeIndex": 1,
  "zkoner:tagline": "寅图运动 创建者 · 构建 AI 时代的个人语义身份"
}
</script>
```

---

## 4. 寅图（tu.json）

### 4.1 义理

> 寅图不是数据库，是**天命图谱**。

129,600 是邵雍皇极经世的一元之数。这张图不是无限发行的，是**有数的**。编号不是注册号，是你在天道秩序中的位置——你的存在到了那个份上，图上自然有你的序号。

寅图的拓扑结构：
```
#1 → #2 → #3 → #4 → … → #129600
```

### 4.2 根节点的角色

\#1 不是管理员，是**第一个站起来的人**。

> 我先站起来，你们看见了我，然后你们也站起来。我不审核你们，我只是记录谁站起来了。你们的质量不需要我批准，你们的 timeline、你们的接图、你们的公开存在——**天道自会分判。**

根节点维护权威版本（`zkoner.com/tu.json`），作用是**记录**而非**审核**。每个节点在自己的域名下也有一份 `tu.json`，内容与根节点同步。

### 4.3 格式

```json
{
  "chainId": "zkoner-2026",
  "chainRoot": "https://zkoner.com",
  "maxIndex": 129600,
  "supply": 1,
  "myIndex": 1,
  "description": "寅图运动 寅图",
  "updatedAt": "2026-06-01",
  "nodes": [
    {
      "index": 1,
      "name": "张明夷",
      "url": "https://zkoner.com",
      "tagline": "寅图运动 创建者 · 构建 AI 时代的个人语义身份",
      "since": "2026-05-26"
    }
  ]
}
```

### 4.4 字段定义

| 字段 | 类型 | 必须 | 说明 |
|------|------|------|------|
| `chainId` | String | 是 | 寅图的标识符，当前为 `zkoner-2026` |
| `chainRoot` | String | 是 | 寅图根节点（#1）的 URL，固定为 `https://zkoner.com` |
| `maxIndex` | Number | 是 | 寅图总量上限，固定 129600，天道定数，不可变更 |
| `supply` | Number | 是 | 当前已归位编号数，永不大于 maxIndex |
| `myIndex` | Number | 是 | 本节点在寅图中的序号 |
| `description` | String | 推荐 | 寅图的描述 |
| `updatedAt` | String | 推荐 | 寅图版本更新时间 |
| `nodes` | Array[Object] | 是 | 寅图中所有已知节点 |
| `nodes[].index` | Number | 是 | 节点序号，范围 1-129600 |
| `nodes[].name` | String | 是 | 节点名称 |
| `nodes[].url` | String | 是 | 节点域名 |
| `nodes[].tagline` | String | 推荐 | 节点自明定位 |
| `nodes[].since` | String | 推荐 | 该节点归位的日期 |

### 4.5 编号规则

- 编号从 1 开始递增，上限：129600
- 编号即归位顺序——谁先站起来，谁在前
- 编后即固定，节点退隐后编号空缺，不回收——**位置空着，等人来应**
- 满员即止，天数是定数，不扩容

编号的数学映射：

```
节点 N 的方位索引 = (N - 1) % 12
节点 N 的甲子索引 = (N - 1) % 60
节点 N 的会索引   = (N - 1) % 360
节点 N 的圈数     = floor((N - 1) / 12) + 1
```

### 4.6 归位（加入图的流程）

> 不是"申请"，不是"注册"，是**归位**。

```
1. 自备
   准备好 schema.json（己证）、
   timeline.json（生平）、tu.json（位证）
   部署到自己的域名下

2. 自明
   确保你的节点是公开的、完整的、可访问的。
   schema.name 不可为占位符。
   timeline 不可为空。

3. 应位
   联系根节点维护者，告知你的域名。
   根节点访问你的域名，确认基本文件存在。
   在根 tu.json 中记入你：

   {
     "index": (当前最大编号 + 1),
     "name": "你的名字",
     "url": "你的域名",
     "tagline": "你的定位",
     "since": "当天日期"
   }

4. 安位
   你将编号填入自己的 tu.json 的 myIndex。
   重新部署。从此你的位置在图上了。
```

### 4.7 寅图序号校验

任何人都可以查看任何人。校验是公开的：

```
1. 读取 https://zkoner.com/tu.json → 看全图
2. 打开 {节点域名}/tu.json        → 看他的自我声明
3. 对照编号是否一致
```

```bash
# 查看一个节点
node verify.js https://节点域名

# 查看整张图
node verify.js --chain
```

verify.js 不判断"好坏"，只判断"是否一致"。**质量是人心判断的，机器只负责透明。**

---

## 5. 生平（timeline.json）

### 5.1 义理

> timeline 不仅是事件记录，是你的**公开生平**。

一个空壳节点可以伪造 schema.json，但它造不出充实的时间线。因为时间线需要真实的过往——你做过的、你写过的、你参与过的。**你的生平就是你质量的唯一凭证。**

### 5.2 格式

```json
[
  {
    "date": "2026-05-26",
    "type": "转折",
    "title": "寅图运动 主网上线",
    "description": "我发布了寅图运动主网，这是 AI 时代个人语义身份语法的第一个公开锚点。",
    "hash": "abc123...",
    "previousHash": null
  },
  {
    "date": "2026-06-01",
    "type": "成就",
    "title": "成为 oner",
    "description": "建立了自己的己证和寅图，完成建图仪式。",
    "hash": "def456...",
    "previousHash": "abc123..."
  }
]
```

### 5.3 字段定义

| 字段 | 类型 | 必须 | 说明 |
|------|------|------|------|
| `date` | String | 是 | 日期，ISO 8601 格式（YYYY-MM-DD） |
| `type` | String | 是 | 类型：`转折` \| `成就` \| `里程碑` \| `接图` |
| `title` | String | 是 | 事件标题 |
| `description` | String | 推荐 | 事件描述——越详实越光明 |
| `hash` | String | 推荐 | 本条记录的 SHA-256 哈希 |
| `previousHash` | String, Null | 推荐 | 上一条记录的哈希（首条为 null） |

### 5.4 约束

- `timeline.json` 不可为空数组——**没有生平的人无法归位**
- `date` 字段不可为空
- `title` 字段不可为空

### 5.5 哈希链（推荐）

时间线的完整性通过哈希链保护：

```
hash = SHA-256( date + type + title + description + previousHash )
```

任何对历史记录的篡改都会导致后续哈希全部失效。**但真正阻止篡改的不是哈希算法，是一旦被发现篡改，你在图中的信用就永远破了。天道之下，一次失信，无人再照。**

---

## 6. 接图（相照）

### 6.1 义理

> 接图不是"双向确认"，是**相照**。

我照亮你——我把你写进我的 timeline，公开说"我认识这个人，我认可他"。
你照亮我——你把我写进你的 timeline，公开说"我也认识这个人，我也认可他"。

**物以类聚，人以群分。** 你连接谁，就说明你是谁。你的接图网络就是你的德行外化。一个只连接高质量节点的人，不需要任何人审核；一个乱接一气的人，他的节点自动贬值——因为**群本身就在分**。

### 6.2 接图流程

```
1. A 在 timeline.json 中添加一条记录：
   {
     "date": "2026-06-01",
     "type": "接图",
     "title": "与 B 接图",
     "description": "与 #27(B) 建立相照。我认可此人的公开存在。",
     "hash": "...",
     "previousHash": "..."
   }

2. B 在 timeline.json 中添加一条记录：
   {
     "date": "2026-06-01",
     "type": "接图",
     "title": "与 A 接图",
     "description": "与 #1(A) 建立相照。我也认可此人的公开存在。",
     "hash": "...",
     "previousHash": "..."
   }
```

### 6.3 相照规则

接图成立当且仅当：
- A 的时间线中存在引用 B 的接图记录
- B 的时间线中存在引用 A 的接图记录
- 两条记录中的日期一致或合理接近

**单向声明无效。单方面的认可不是接图，是关注。**

### 6.4 信任推导

> 如果 A 与 B 接图，B 与 C 接图，则 A 与 C 之间有间接信任关系。但每经过一跳，信任衰减一层。**真正的信任不来自推导，来自自己去看。**

---

## 7. 观（观察与判断）

### 7.1 义理

> protocol 不叫"验证"，叫"观"。

《易经》观卦：**观天之神道，而四时不忒。** 天道不需要审核四季，四季自然运行。同样，寅图不需要审核节点，节点自然呈现。

"观"不是"检查"，是**看**。看他的 schema、看他的 timeline、看他的接图——**看完之后，你心里自有判断。**

### 7.2 观什么

| 观什么 | 怎么看 | 看出什么 |
|--------|--------|----------|
| schema.json | 看 name/description/knowsAbout | 他如何定义自己，是否真诚 |
| timeline.json | 看记录的密度、深度、时长 | 他的生平是否充实，是否有一贯性 |
| tu.json | 看 myIndex | 他在图中的位置 |
| 接图列表 | 看他和谁连接 | 他的圈子，他的层次 |
| index.html | 看他如何向世界呈现自己 | 他的审美、他的用心 |

### 7.3 机器辅助验证

verify.js 做的是最低层级的辅助——检查文件是否存在、字段是否非空。它回答的不是"这个节点好不好"，而是**"这个节点是否满足最基本的归位条件"**。

```
# 最低归位条件（机器可验）
✓ schema.json 存在，name 非空，url 与域名一致
✓ timeline.json 存在，非空数组
✓ tu.json 存在，编号在 1-129600 范围内
✓ 编号一致（schema.identifier.value === tu.myIndex）

# 质量判断（人心裁量）
○ schema.description 是否充实
○ timeline 记录的深度和一贯性
○ 接图网络的质量
○ 域名下是否有 index.html 等额外内容
```

---

## 8. 编号与空间

### 8.1 编号映射

节点编号映射到螺旋坐标系（寅图）的数学规则：

```
编号 N 的方位 = DIZHI[(N-1) % 12]
编号 N 的甲子 = JIAZI[(N-1) % 60]
编号 N 的圈数 = floor((N-1) / 12) + 1
```

其中：
- DIZHI = ['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥']
- JIAZI = ['甲子','乙丑',...,'癸亥']（60 循环）

### 8.2 空间约束

- 单张寅图总量固定 129600 个节点，满员即止——天数有定
- 编号顺序即归位顺序——先来后到，天道自然
- 编号不可自定义——你的位置不是你自己选的，是你的存在应到的

---

## 9. 锚定

### 9.1 义理

> 锚定不是为了防篡改，是**留下天象**。

你做了建图、接图这些事，在 timeline 里留下 hash。即使你的域名有一天不在了，这些 hash 还在链上、还在邮件里。**天道不依赖任何单一载体。**

### 9.2 邮件锚定（推荐）

时间线每次更新后，将当前最后一条记录的 hash 通过邮件发送给自己：

```
To: yourname@yourdomain.com
Subject: 寅图运动 timeline anchor
Body: 当前最新 hash: <hash>
```

邮件头的 `Date` 字段由邮件服务器加盖，可作为外部时间证明。

### 9.3 链上锚定（可选）

关键事件（建图、重要接图）可将 timeline hash 写入低成本区块链：
- Arweave（推荐，一次性费用 < $0.01）
- Ethereum calldata（可选）

---

## 10. 协议版本

- 当前版本：v1·天道（2026-06）
- 协议版本标识：`zkoner-2026`
- 兼容性：本版本协议向前兼容，未来版本需声明版本号

---

## 附录 A：天道微言

```
不要问"怎么保证上图者的质量"。
要问"我是否光明正大到了让人无法质疑的地步"。

质量不是审核出来的，是公开出来的。
信任不是验证出来的，是照亮出来的。
```

## 附录 B：协议验证辅助（伪代码）

```python
def observe_node(url):
    """观一个节点——记录客观事实，不下主观判断"""
    schema = fetch(url + "/schema.json")

    facts = {
        "name": schema.get("name"),
        "description_len": len(schema.get("description", "")),
        "knowsAbout_count": len(schema.get("knowsAbout", [])),
        "url_matches_domain": schema.get("url") == url,
    }

    timeline = fetch(url + "/timeline.json")
    facts["timeline_count"] = len(timeline)

    chain = fetch(url + "/tu.json")
    facts["myIndex"] = chain.get("myIndex")
    facts["index_consistent"] = facts["myIndex"] == schema.get("identifier", {}).get("value")

    return facts  # 事实公开，判断交给观察者
```

## 附录 C：节点模板

参考仓库中的 `template/` 目录获取初始节点模板。

---

> 寅图运动的协议不是为了防范坏人，而是为了让光明正大的人能彼此看见。因为当天道彰显时，黑暗自然无处藏身。
