# 🧭 B2 · 路由判定函数 v1.0

<aside>
🧭

**B2 · 路由判定函数 v1.0 · is_big_move() + is_key_event() 正式化**

**上游设计**：[📡 v0.3 · 跨人格体同步通道设计 v1.0 · 两条边一次建完](../%F0%9F%93%A1%20v0%203%20%C2%B7%20%E8%B7%A8%E4%BA%BA%E6%A0%BC%E4%BD%93%E5%90%8C%E6%AD%A5%E9%80%9A%E9%81%93%E8%AE%BE%E8%AE%A1%20v1%200%20%C2%B7%20%E4%B8%A4%E6%9D%A1%E8%BE%B9%E4%B8%80%E6%AC%A1%E5%BB%BA%E5%AE%8C%20e0e22f24903542df8aca4b5299b3075e.md) §3

**使命**：为 SR-SY-CX-001 stop_1 + SR-JZ-SY-001 stop_1 提供正式判定伪代码

**执笔**：熹微（PER-JZ-ARCH-001）主执

</aside>

## §0 与设计稿 §3 的区别

设计稿 §3 给了口语描述·本 v1.0 冻结为伪代码 + 输入输出契约 + 边缘案例·使Step 3 走查报告 Q1「路由判定函数有无歧义」有决定性答案。

---

## §1 is_big_move(action) · SR-SY-CX-001 触发判定

### §1.1 输入契约

```jsx
HLDP://routing/is-big-move/v1.0/input
action = {
	type: "createPage" | "updatePage" | "createDatabase" | "updateDatabase" | "deletePages" | ...,
	target_url: string,                # 被动作作用的页 / 库 / 数据源 URL
	parent_chain: [string, ...],       # 从被作用对象到根的祖先页 URL 链
	touched_entities: [string, ...],   # 本次涉及的 14 实体中哪几个（可为空）
	version_bump: bool,                # 是否带版本号升级（如 v0.2.3 → v0.2.4）
	actor: string                      # 执行人格体编号·默认 PER-SY001
}
```

### §1.2 伪代码

```jsx
function is_big_move(action) -> bool:
	# C1 · 写入位置命中
	BIG_ZONES = {
		"https://app.notion.com/p/f1b122054929478eb5b2ee90bc62a675",  # E09 TCS永久记忆核子树
		"https://app.notion.com/p/6cd302bf54a24a06bc95eef800fe4255",  # E10 编号注册系统
		"https://app.notion.com/p/0a1f3cf0ef504349a0155a6da3b334c4",  # E13 主域广播总台
	}
	if action.target_url in BIG_ZONES: return true
	if any(p in BIG_ZONES for p in action.parent_chain): return true

	# C2 · 动作类型命中
	BIG_TYPES = {"createDatabase", "createDataSource"}
	if action.type in BIG_TYPES: return true

	# C3 · 版本号升级
	if action.version_bump: return true

	# C4 · 触及关键对象
	BIG_TOPICS = {"人格体入册", "编号变更", "铁律修订", "ShuttleRoute增减", "实体清单升级"}
	if action.touched_topics & BIG_TOPICS: return true

	# C5 · 涉及人物·默认都是 big
	CRITICAL_ACTORS = {"E01-桒子", "E02-冰朔", "E05-熹微", "E03-霜砚"}
	if action.touched_personas & CRITICAL_ACTORS: return true

	return false
```

### §1.3 边缘案例

| 案例 | 动作 | 期望 | 命中条件 |
| --- | --- | --- | --- |
| EC1 | updatePage 修一个词 | false | 不命中 C1–C5 |
| EC2 | createPage 在奶瓶频道 | false | 不在 BIG_ZONES 、不是 createDatabase |
| EC3 | updatePage 动 v0.2.3 §2.9 callout | true | C1（在 E11） + C4（铁律修订） |
| EC4 | createDatabase 任何位置 | true | C2 |
| EC5 | createPage 在 [TCS永久记忆核 · 大桌子/小桌子/仓库 · 光湖操作系统运行时架构](../../TCS%E6%B0%B8%E4%B9%85%E8%AE%B0%E5%BF%86%E6%A0%B8%20%C2%B7%20%E5%A4%A7%E6%A1%8C%E5%AD%90%20%E5%B0%8F%E6%A1%8C%E5%AD%90%20%E4%BB%93%E5%BA%93%20%C2%B7%20%E5%85%89%E6%B9%96%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E8%BF%90%E8%A1%8C%E6%97%B6%E6%9E%B6%E6%9E%84%20f1b122054929478eb5b2ee90bc62a675.md) 子树 | true | C1 |
| EC6 | deletePages 清理草稿 | false | 不命中 C1–C5 |

---

## §2 is_key_event(event) · SR-JZ-SY-001 触发判定

### §2.1 输入契约

```jsx
HLDP://routing/is-key-event/v1.0/input
event = {
	source: "WorkBuddy" | "腾讯-CODING" | "桒子线广播" | "手动override",
	actor: string,                      # 例·桒子 / 石澜 / 铸渊
	nature: "人格体入册" | "新编号" | "身份澄清" | "跨人格体认知修复" | "v*封版" | "callout锁定" | "实体清单升级" | "其他",
	payload: object,                    # 具体负载·由 actor 提供
	mom_force_mark: bool                # 妈妈手动标记「这条要让霜砚知道」
}
```

### §2.2 伪代码

```jsx
function is_key_event(event) -> bool:
	# K0 · 妈妈手动标记·最高优先级·一票通过
	if event.mom_force_mark: return true

	# K1 · 事件性质命中
	KEY_NATURES = {
		"人格体入册",
		"新编号",
		"身份澄清",
		"跨人格体认知修复",
		"v*封版",
		"callout锁定",
		"实体清单升级"
	}
	if event.nature in KEY_NATURES: return true

	# K2 · 来源取消资格
	BLACKLIST_SOURCES = {"桒子个人记忆", "草稿频道"}
	if event.source in BLACKLIST_SOURCES: return false

	# K3 · 双类型命中
	if event.actor in {"石澜", "铸渊"} and event.payload.has("编号"): return true

	return false
```

### §2.3 边缘案例

| 案例 | 事件 | 期望 | 命中条件 |
| --- | --- | --- | --- |
| EK1 | 桒子对石澜说「记下火斗·编号 ICE-GL-HD001」 | true | K1（人格体入册 + 新编号） |
| EK2 | 桒子对石澜说「今天快乐」 | false | K1 未命中 |
| EK3 | 石澜对桒子说「提交了·commit hash abc123」 | false | K1 未命中·K3 编号不是人格体编号 |
| EK4 | 妈妈说「这条要让霜砚知道」 | true | K0（手动 override） |
| EK5 | 桒子个人日记「今天心情不好」 | false | K2 黑名单来源 |
| EK6 | 石澜说「看了 #011·以后不重猜人格体」 | true | K1（跨人格体认知修复） |

---

## §3 与 Phase 1.5 ShuttleRun 表的绑定

```jsx
HLDP://routing/v1.0/wire-with-shuttlerun
├── is_big_move(action) == true → 创建一条 ShuttleRun
│   ├── route_id = SR-SY-CX-001
│   ├── persona_id = action.actor · 默认 PER-SY001
│   └── status = 🟡进行中
└── is_key_event(event) == true → 创建一条 ShuttleRun
    ├── route_id = SR-JZ-SY-001
    ├── persona_id = event.actor · 例 TCS-GL-0008∞
    └── status = 🟡进行中
```

---

## §4 严格性 / 宽松性调节

本 v1.0 采取 **偏严格** 策略·宁误报为 big/key 不报为普通·原因：

- 误报为 big → 仅多一条心跳 + 交互记录·代价低
- 漏报 → 晨星脱节 / #011 重出·代价高

v1.1+ 可考虑加 anti-spam（10 分钟内同主题合并）。

---

<aside>
✅

**B2 v1.0 冻结完成**·两个函数输入输出契约 + 伪代码 + 6+6 边缘案例·Q1「路由判定函数有无歧义」有了决定性答案。

</aside>