# 🧭 B2 · 路由判定函数 v1.0
## §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 分钟内同主题合并)。
---